【问题标题】:c# Inserting int value into SQL tablec#将int值插入SQL表
【发布时间】:2019-03-20 22:54:55
【问题描述】:

我想在 SQL 表中插入一些数据。但是在插入 int 时,无论我尝试了什么,都会出错:

System.Data.SqlClient.SqlException: '转换时转换失败 varchar 值 '@ID' 到数据类型 int。'

我什至手动将 ID 设置为 1 只是为了 100 % 确定它是 int 但仍然出现该错误

String query = "INSERT INTO table(dbo.table.ID, dbo.table.secondvar) 
VALUES ('@ID','@secondvar')";             
 using (SqlCommand cmd = new SqlCommand(query, connection))
                    {
                        int ID = 1;
                        cmd.Parameters.AddWithValue("@ID", ID);
                        cmd.Parameters.AddWithValue("@secondvar", tableModel.secondvar);    
                        connection.Open();
                        int result = cmd.ExecuteNonQuery();

【问题讨论】:

    标签: c# sql insert int


    【解决方案1】:

    删除值周围的引号。框架已经处理了。

    VALUES ('@ID','@secondvar')
    

    应该是

    VALUES (@ID,@secondvar)
    

    【讨论】:

    • 这个答案更好,两个值都必须没有分号。超时后我会将此标记为答案
    【解决方案2】:

    ID 是一个整数,所以它不能在'' 之间:

    改变这一行:

    String query = "INSERT INTO table(dbo.table.ID, dbo.table.secondvar) 
    VALUES ('@ID','@secondvar')";
    

    到这里:

    String query = "INSERT INTO table(dbo.table.ID, dbo.table.secondvar) 
    VALUES (@ID,@secondvar)";
    

    its better avoid using AddWithValue 则改为:

    String query = "INSERT INTO table(dbo.table.ID, dbo.table.secondvar) 
    VALUES (@ID,'@secondvar')";             
     using (SqlCommand cmd = new SqlCommand(query, connection))
     {
          int ID = 1;
          cmd.Parameters.Add("@ID", SqlDbType.Int).Value = ID;
          cmd.Parameters.Add("@secondvar", SqlDbType.VarChar).Value = somevalue; 
          //rest of the code
     }
    

    【讨论】:

    • 不要引用任何值。连弦都没有。该框架会为您做到这一点。这就是 Prepared Statements 的优势。
    猜你喜欢
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多