c#Insert语句 - 数组作为sql列名

问题描述 投票:0回答:2

我有两张桌子,Vehicle_StatusTrans_Income

Vehicle_Status包含两列Vehicle_NumberStatusVehicle_Number包含Trans_Income列名的数据。

我想将Vehicle_Number中的数据加载到数组中并在insert语句中使用它。

string[] vehicleActive = new string[100];

SqlCommand cmd = new SqlCommand("Select Vehicle_Number from [dbo].[Vehicle_Status] Where Status = 'Inactive'", con);
cmd.CommandType = CommandType.Text;

con.Open();
int a = 0;

SqlDataReader dr = cmd.ExecuteReader();

while (dr.Read())
{
    vehicleActive[a] = dr["Vehicle_Number"].ToString();
    a++;
}

con.close();

for (int b = 0; b < a; b++)
{
    cmd = new SqlCommand("Insert Into [dbo].[Trans_Income](Month, Particular,'"+vehicleActive[b]+"') VALUES (@Month, @Particular, @vehicleNo )", con);

    con.Open();

    cmd.Parameters.AddWithValue("@Month", textBox2.Text);
    cmd.Parameters.AddWithValue("@Particular", textBox2.Text);
    cmd.Parameters.AddWithValue("@vehicleNo", textBox3.Text);

    cmd.ExecuteNonQuery();
    con.Close();    
}   

但是我得到了错误

System.Data.SqlClient.SqlException:''BJW6719'附近的语法不正确。'

其中一个专栏名称是BJW6719 - 任何人都可以帮我这个吗?或者还有其他更好的方法吗?先感谢您。

c# sql syntax-error
2个回答
1
投票

我注意到你的列名称周围有额外的'字符,它们不是必需的。尝试使用以下代码:

cmd = new SqlCommand("Insert Into [dbo].[Trans_Income](Month, Particular,"+vehicleActive[b]+") VALUES (@Month, @Particular, @vehicleNo )", con);

您确定第三列名称是:BJW6719。如果是,则上述操作将起作用,否则您需要添加正确的列名称。


0
投票

如果您使用的是.net framework 4.5,那么您可以将表转换为arrey,这里是代码

try
                {
                  var dt = new DataTable();
                  var cmd = new SqlCommand();
                  cmd.CommandText = @"Select Vehicle_Number from [dbo].[Vehicle_Status] Where Status = 'Inactive'";
                                   var da = new SqlDataAdapter(cmd);
                  da.Fill(dt);
                }
             catch (Exception ex)
                {

                }
             finally
                {
                  if (cmd.Connection.State == ConnectionState.Open)
                   {
                     cmd.Connection.Close();
                   }
                }

               var vehicleActive= dt.Rows[0].ItemArray.Select(x => x.ToString()).ToArray();

然后你可以像这样循环遍历你的数组

for (int i = 0; i < vehicleActive.Length; i++)
                    {
                        cmd = new SqlCommand("Insert Into [dbo].[Trans_Income](Month, Particular,'"+vehicleActive[b]+"') VALUES (@Month, @Particular, @vehicleNo )", con);

                        con.Open();


                        cmd.Parameters.AddWithValue("@Month", textBox2.Text);
                        cmd.Parameters.AddWithValue("@Particular", textBox2.Text);
                        cmd.Parameters.AddWithValue("@vehicleNo", textBox3.Text);

                        cmd.ExecuteNonQuery();
                        con.Close();    
                     }  

这是从代码循环数据库的更好方法,并且列名可能存在问题,因此在从代码中定义sql查询之前从sql server检查列名

© www.soinside.com 2019 - 2024. All rights reserved.