SqlException:'1'附近的语法不正确

时间:2018-11-17 03:35:39

标签: c# sql unity3d prepared-statement

我目前正在尝试使用Unity3D将SQL实施到项目中。到目前为止,我已经能够执行“常规”的UPDATE,ADD,DELETE,DROP,ALTER,INSERT”。

尝试进一步,我尝试使用此链接作为guide

插入准备好的语句

这是我的代码:

a

我的桌子看起来像这样:

b

我收到此错误:

  

SQLException:'1'附近的系统税不正确。

     

System.Data.SqlClient.SqlConnection.ErrorHandler(System.Object发送者,Mono.Data.Tds.Protocol.TdsInternalErrorMessageEventArgs e)

请帮助?提前谢谢您。.我找不到我做错了什么地方。

4 个答案:

答案 0 :(得分:2)

您可以在不损失功能的情况下进行大量减少,甚至可以进行一些重要的改进(例如,即使抛出异常也可以关闭连接):

using (var sqlConnection = new SqlConnection(Connection.connectionString))
using (var cmd = new SqlCommand("INSERT INTO IngredientTypes (Name) VALUES (@name)",  sqlConnection))
{
    cmd.Parameters.Add("@name", SqlDbType.VarChar, 155).Value = Name;
    sqlConnection.Open();
    cmd.ExecuteNonQuery();
}

不过,我不确定是什么导致了您现有代码中的异常,因为在该查询的任何地方都没有使用1。我怀疑,该问题与SqlDbType.Text有关,因为不是VarChar列配合使用的正确类型,但似乎就像我们尚未看到的某个地方的代码正在更改您的SQL命令文本一样。

肯定地,链接中的Prepare()方法对于Sql Server来说是不需要的。它是从DbCommand那里继承而来的,因为它是API的重要组成部分,所以被包含在其中其他一些数据库,但是Sql Server已经自动处理此问题已有10多年了。

答案 1 :(得分:1)

SqlDbType.Text与varchar不同。我不相信您指定的文本类型的长度。

答案 2 :(得分:0)

您可以尝试以下吗?顺便说一下,对于SQL连接,使用“使用”结构更安全,当过程完成后,连接会自动关闭。

using (SqlConnection sqlConnection = new SqlConnection(Connection.connectionString))
    {
        SqlCommand command = new SqlCommand("INSERT INTO IngredientTypes (Name) VALUES (@name)", connection);
        command.Parameters.Add("@name", SqlDbType.Varchar, 155);
        command.Parameters["@name"].Value = Name; //make sure Name is string.

        try
        {
            sqlConnection.Open();
            command.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

答案 3 :(得分:0)

我完全按原样尝试了您的代码,但没有发现问题。尽管几乎没有编译错误(缺少;在第1行中,名称变量应该作为参数出现),但是我相信您知道这一点。如果您发布的表结构和代码与项目中的代码完全相同,则此代码没有问题。