【问题标题】:Error in Inserting data in SQL table在 SQL 表中插入数据时出错
【发布时间】:2014-02-07 10:14:17
【问题描述】:

我正在尝试通过 c# 代码将数据插入到表中(比如反馈),其中包含来自 (int) 和 Message(Varchar(MAX)) 的列,但它不断地让我因错误而烦恼。请帮忙,我很绝望。

表说明: 来自 int,Message Varchar(max)

我正在使用的代码:

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["SampleConnectionString"].ConnectionString);
con.open;
string query="insert into Feedback (From,Message) values(@frm,@msg)";
SqlCommand comm = new SqlCommand(query, con);
comm.Parameters.AddWithValue("@frm", Convert.ToInt32(TextBoxid.Text));
comm.Parameters.AddWithValue("@msg",TextBoxFeedBack.text);

comm.ExecuteNonQuery();
con.Close();

我得到的错误是

System.Data.SqlClient.SqlException (0x80131904):附近的语法不正确 关键字“来自”。在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常, 布尔中断连接)在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔型 breakConnection) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() 在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler、SqlDataReader 数据流、 BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior,字符串 resetOptionsString) 在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior、RunBehavior runBehavior、布尔 returnStream、布尔 异步)在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior、runBehavior、布尔返回流、字符串 方法,DbAsyncResult 结果)在 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult 结果,字符串方法名称,布尔值 sendToPipe) 在 System.Data.SqlClient.SqlCommand.ExecuteNonQuery() 在 _Default.Button1_Click(Object sender, EventArgs e) 在 c:\Users\Ajaz\Documents\Visual Studio 2010\WebSites\WebSite26\Default.aspx.cs:第 29 行

我猜测存在与数据不匹配有关的错误。请帮忙。 谢谢

【问题讨论】:

    标签: c# .net sql-server ado.net


    【解决方案1】:

    FROM 是 TSQL 中的 reserved keyword。您应该将它与方括号一起使用,例如[FROM]

    string query="insert into Feedback ([From],Message) values(@frm,@msg)";
    

    作为一般建议,不要将保留关键字用于数据库中的标识符和对象名称。

    也可以使用using statement 来处理你的SqlConnection 赞;

    string query = "insert into Feedback ([From],Message) values(@frm,@msg)";
    using(SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["SampleConnectionString"].ConnectionString))
    {
      SqlCommand comm = new SqlCommand(query, con);
      comm.Parameters.AddWithValue("@frm", Convert.ToInt32(TextBoxid.Text));
      comm.Parameters.AddWithValue("@msg",TextBoxFeedBack.text);
      con.Open();
      comm.ExecuteNonQuery();
      con.Close();
    }
    

    【讨论】:

      【解决方案2】:

      “发件人”是保留字。用方括号括起来:

      string query="insert into Feedback ([From],Message) values(@frm,@msg)";
      

      【讨论】:

        【解决方案3】:

        嗯,FROM 这个词在世界上任何 SQL 语言中都是众所周知的关键字。如果你想使用它(非常糟糕的举动)那么你需要将它封装在方括号中

        string query="insert into Feedback ([From],Message) values(@frm,@msg)";
        

        同样,不要那样做,在更改大量代码之前更改列的名称。
        否则,您将在应用的整个生命周期内遇到此问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-09-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-16
          • 2012-10-26
          相关资源
          最近更新 更多