将数据插入SQL表显示错误

时间:2019-05-02 05:32:42

标签: c# sql sql-server database

我正在尝试将数组数据存储到SQL表中,但是每次都会向我抛出错误。我真的不知道该如何解决并解决问题

我已经尝试过分别插入值,但是仍然无法正常工作。我正在从MS Word中提取数据,然后将其放入数组中,然后再传递给我的SQL表

SqlConnection sc = new SqlConnection();
SqlCommand sm = new SqlCommand();
sc.ConnectionString = "server = ASIR\\SQLEXPRESS; database = elawdb; uid = Asir/Dip; Integrated Security=True";
sc.Open();
string query = "INSERT INTO Reference_form (DATAFILENAME, ACTFILENAME, ACTTITLE,FORMNUMBER, FORMTITLE, SECTIONREFERENCE, BOOLEANTEXT, COUNTRY)";
query += " VALUES (" + db[0] + "," + db[1] + "," + db[2] + "," + db[3] + "," + db[4] + "," + db[5] + "," + db[6] + "," + db[7] +" )";

SqlCommand myCommand = new SqlCommand(query, sc);
//}
myCommand.ExecuteNonQuery();

//       myinfo.Text = "connection to db is made";
sc.Close();
doc.Close();
word.Quit();

我得到的错误是:

  

类型为'System.Data.SqlClient.SqlException'的未处理异常   发生在System.Data.dll中,“,”附近的语法不正确。 '出'不是   可以识别的SET选项。

2 个答案:

答案 0 :(得分:0)

从C#6开始,您可以使用字符串插值,这使您的sql命令更具可读性。

string query = $"INSERT INTO Reference_form (DATAFILENAME, ACTFILENAME, ACTTITLE,FORMNUMBER, FORMTITLE, SECTIONREFERENCE, BOOLEANTEXT, COUNTRY) VALUES ('{db[0]}', '{db[1]}', .......)";

如果您想获得更详细的答案,则必须向我们显示带有示例值的表和sql插入命令

答案 1 :(得分:0)

直接的问题是,您要将字符串连接到SQL代码中,而没有将它们括在撇号中。执行查询后,Sql Server会发现类似于SQL代码的内容,而不是应插入的字符串。

但这是 不好的做法 ,通过像您当前正在执行的那样将字段值进行连接来构建查询。它可能带来Sql injection的可能性,进而可能导致数据泄漏或数据丢失。 现在,现在是您学习使用参数而不是将数据串联到Sql代码中的时候了。

这是代码的SQL部分的(未经测试的)版本:

using (SqlConnection sc = new SqlConnection())
using (SqlCommand sm = new SqlCommand())
{
    sc.ConnectionString = "server = ASIR\\SQLEXPRESS; database = elawdb; uid = Asir/Dip; Integrated Security=True";
    sc.Open();
    sm.CommandText = @"
        INSERT INTO Reference_form (DATAFILENAME, ACTFILENAME, ACTTITLE, FORMNUMBER, FORMTITLE, SECTIONREFERENCE, BOOLEANTEXT, COUNTRY)
        VALUES (@DATAFILENAME, @ACTFILENAME, @ACTTITLE, @FORMNUMBER, @FORMTITLE, @SECTIONREFERENCE, @BOOLEANTEXT, @COUNTRY)
    ";
    sm.Parameters.Add(new SqlParameter("@DATAFILENAME", System.Data.SqlDbType.VarChar)).Value = db[0];
    sm.Parameters.Add(new SqlParameter("@ACTFILENAME", System.Data.SqlDbType.VarChar)).Value = db[1];
    sm.Parameters.Add(new SqlParameter("@ACTTITLE", System.Data.SqlDbType.VarChar)).Value = db[2];
    sm.Parameters.Add(new SqlParameter("@FORMNUMBER", System.Data.SqlDbType.VarChar)).Value = db[3];
    sm.Parameters.Add(new SqlParameter("@FORMTITLE", System.Data.SqlDbType.VarChar)).Value = db[4];
    sm.Parameters.Add(new SqlParameter("@SECTIONREFERENCE", System.Data.SqlDbType.VarChar)).Value = db[5];
    sm.Parameters.Add(new SqlParameter("@BOOLEANTEXT", System.Data.SqlDbType.Text)).Value = db[6];
    sm.Parameters.Add(new SqlParameter("@COUNTRY", System.Data.SqlDbType.VarChar)).Value = db[7];
    sm.Connection = sc;
    sm.ExecuteNonQuery();
}