【问题标题】:Message=Incorrect syntax near ')'. Source=Core .Net SqlClient Data Provider消息=')' 附近的语法不正确。 Source=Core .Net SqlClient 数据提供者
【发布时间】:2021-03-01 13:39:10
【问题描述】:

我正在尝试将 csv 加载到我的数据库中,但我不断收到以下异常

Message=')' 附近的语法不正确

我的代码块如下图。

var lineNumber = 0;
using (SqlConnection conn = new SqlConnection(@"Data Source=DESKTOP-3EHXXXX;Initial Catalog=XXX_XXXX_Monitoring;Integrated Security=True"))
{
    conn.Open();
    using (StreamReader reader = new StreamReader(@"C:\\Users\\xxx\\Documents\\XXX\\XXX DATA\\xxxxx_xxxx_2011.csv"))
    {
        while (!reader.EndOfStream)
        {
            var line = reader.ReadLine();
            if(lineNumber !=0)
            {
                var values = line.Split(',');
                Console.WriteLine("Before DB Insertion");
                var sql = "INSERT INTO XXXXXXX_Monitoring.dbo.LimsDataLists VALUES ('" + values[0] + "','" + values[1] + "','" + values[2] + "','" + "','" + values[3] + "','" + values[4] + "','" + values[5] + "','" + values[6] + "','" + values[7] + "','" + values[8] + "','" +
                    values[9] + "','" + values[10] + "','" + values[11] + "','" + values[12] + "','" + values[13] + "','" + values[14] + "','" +
                    values[15] + "','" + values[16] + "','" + values[17] + "','" + values[18] + "','" + values[19] + "','" + values[20] + "','" +
                    values[21] + "','" + values[22] + "','" + values[23] + "','" + values[24] + "','" + values[25] + "','" + values[26] + "','" +
                    values[27] + "','" + values[28] + "','" + values[29] + "','" + values[30] + "','" + values[31] + "','" + values[32] + "','" +
                    values[33] + "','" + values[34] + "','" + values[35] + "','" + values[36] + "','" + values[37] + "'," + values[38] + ")";

                var cmd = new SqlCommand();
                cmd.CommandText = sql;
                cmd.CommandType = System.Data.CommandType.Text;
                cmd.Connection = conn;
                cmd.ExecuteNonQuery();
            }
            lineNumber++;
        }
    }
    conn.Close();
}
Console.WriteLine("Data import Complete!");
Console.ReadLine();

【问题讨论】:

  • 出错时sql 的值是多少?
  • 旁注:您的代码容易受到 sql 注入的影响。您应该改用参数化查询
  • 您能否澄清这与实体框架有什么关系?我在这个问题中没有看到任何与 EF 相关的内容。
  • 如果你使用 SqlParameters 而不是连接字符串,你将大大减少出现语法错误的机会。
  • value[38] 周围缺少单引号。应该是,'" + values[38] + "')");

标签: c# .net sql-server


【解决方案1】:

如果您不想使用 EF,可以使用 SqlParameter 代替纯查询文本:

var sqlParams = new List<object>();
var valuesList = new List<string>();
for (int i = 0; i < values.Length; i++)
{
    sqlParams.Add(new SqlParameter($"@Value{i}", values[i]));
    valuesList.Add($"@Value{i}");
}

var sql = $"INSERT INTO EMR_LIMS_Monitoring.dbo.LimsDataLists VALUES ({ string.Join(", ", valuesList)})";
cmd.Parameters.AddRange(sqlParams);

【讨论】:

【解决方案2】:

我怀疑错误在于 sql 变量。因此,您需要调试代码以捕获 sql 变量具有的字符串值。然后在 SQL IDE 的某处运行 sql 字符串值。希望通过这种方式,您会找到他陷入困境的地方;这可能是您的 INSERT INTO 查询中的语法错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 2013-12-16
    • 1970-01-01
    相关资源
    最近更新 更多