c#Insert statement - array as sql column name

时间:2017-12-20 07:24:52

标签: c# sql syntax-error

我有两个表,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 - 任何人都可以帮我这个吗?或者还有其他更好的方法吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

我注意到你有额外的&#39;列名称周围的字符,不是必需的。请尝试使用以下代码:

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

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

答案 1 :(得分: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检查列名