【问题标题】:Syntax Error Ocurring on the Data Reader数据读取器上出现语法错误
【发布时间】:2017-08-27 07:11:36
【问题描述】:

try
{

    int i = 0;
    using (SqlConnection sqlCon = new SqlConnection(Form1.connectionString))
    {

        string commandString = "INSERT INTO Logindetail (Account,ID,Logint,Logoutt) values ('" + acc + "'," + textbxID.Text + "," + null + ", SYSDATETIME()" + ");";
            // MessageBox.Show(commandString);
            SqlCommand sqlCmd = new SqlCommand(commandString, sqlCon);
            sqlCon.Open();
            SqlDataReader dr = sqlCmd.ExecuteReader();
            i = 1;
            if (i == 0)
            {
                MessageBox.Show("Error in Logging In!", "Error");
            }
            MessageBox.Show("Successfully Logged In");

    }

}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}

我正在为一个项目创建一个登录表单。我创建了一个显示登录详细信息的表(帐户、ID、登录时间、注销时间)。但是当我运行程序时,它没有成功运行。我遇到了一个错误在图 2 中。当我删除 sql 'data reader' 时,程序运行时不显示错误。

【问题讨论】:

  • 任何帮助将不胜感激......
  • 不要发布显示错误和代码的图片,而是错误和代码本身。另外请不要使用字符串连接......它的 SQL 注入易受攻击 - 使用参数化查询 - 它也可以解决您当前的问题
  • 我没听懂......请把链接发给我,这对我来说会更容易......谢谢
  • SQL Injection alert - 您应该将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入 - 查看Little Bobby Tables

标签: c# sql-server-2012


【解决方案1】:

当你连接一个 null 时,它基本上不会向字符串添加任何内容,所以这段代码:

string commandString = "INSERT INTO Logindetail (Account,ID,Logint,Logoutt) values ('" + acc + "'," + textbxID.Text + "," + null + ", SYSDATETIME()" + ");";

这个字符串的结果,你可以看到它有一个额外的逗号,这会导致异常:

"INSERT INTO Logindetail (Account,ID,Logint,Logoutt) values ('acc',textbxID,, SYSDATETIME());"

如果你想将 NULL 添加到查询中,它必须是一个字符串,所以这样做:

string commandString = "INSERT INTO Logindetail (Account,ID,Logint,Logoutt) values ('" + acc + "'," + textbxID + ", NULL , SYSDATETIME()" + ");";

您使用的是ExecuteReader 而不是ExecuteNonQuery。您不能使用ExecuteReader 将行插入数据库。

另外,正如另一个答案中提到的那样,您最好使用参数来避免 SQL 注入。

【讨论】:

  • 应用程序运行成功,但没有保存在数据库中
  • 请指导我进一步处理
  • 我向您展示了错误以及如何修复它。更改查询的创建(如我的回答所示)并尝试。您创建的查询格式不正确
  • 我根据你的回答改了....现在程序运行成功没有任何错误。但唯一的问题是它甚至没有使用你的回答将数据保存在数据库中.
  • 将代码调试到可以看到已构建查询的位置。复制此查询并尝试在 sql-server 中运行。如果它不起作用,请查看它给您的错误。也许您不能在该列中放置空值,或者其他列可能具有不同的约束。如果您需要进一步的帮助,请显示 Logindetails 表的定义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
  • 2017-12-21
相关资源
最近更新 更多