检查带有填充参数的sql语句

本文关键字:sql 语句 参数 填充 检查 | 更新日期: 2023-09-27 17:58:21

我有这个代码,编译器抛出这个错误:

SqlException:"0"附近的语法不正确

我找不到SQL Server使用的导致此错误的实际SQL语句。

有没有一种方法可以获得带参数的SQL语句,让我重现错误并修复它?或者我的代码有问题?

void Main()
{
    DataTable table = new DataTable("Task");
    table.Columns.Add("ID");
    table.Columns.Add("Type");
    table.Columns.Add("Worker");    
    table.Columns.Add("CaseID");
    table.Columns.Add("Name");
    DataRow row1 = table.NewRow();
    row1["Type"]="Type1";
    row1["Worker"]="ABCD";
    row1["CaseID"] = "1234567";
    row1["Name"] = "ABC";
    table.Rows.Add( row1 );

    SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
    sqlDataAdapter.InsertCommand = new SqlCommand( sqlStatement(),(SqlConnection)Connection);
    sqlDataAdapter.InsertCommand.CommandType = CommandType.Text;
    sqlDataAdapter.RowUpdating += new SqlRowUpdatingEventHandler(da_RowUpdating);
    sqlDataAdapter.InsertCommand.Parameters.Add( "@Type",SqlDbType.VarChar,4, "Type" );
    sqlDataAdapter.InsertCommand.Parameters.Add( "@Worker",SqlDbType.VarChar,4, "Worker" );
    sqlDataAdapter.InsertCommand.Parameters.Add( "@CaseID",SqlDbType.VarChar,7, "CaseID" );
    sqlDataAdapter.InsertCommand.Parameters.Add( "@Name",SqlDbType.VarChar,50, "Name" );
    sqlDataAdapter.Update( table );
}
static void da_RowUpdating(object sender, SqlRowUpdatingEventArgs e)
{
  Console.WriteLine("'nRow Updating...");
  Console.WriteLine("Command text: 'n{0}", e.Command.CommandText);
  Console.WriteLine("'nParameters:");
  foreach (SqlParameter p in e.Command.Parameters)
  {
      Console.WriteLine("'t{0} - {1}", p.ParameterName, p.Value);
  }
}
string sqlStatement()
{
    return @"EXECUTE sp_executesql
    N'INSERT  INTO Task
            (
                Type,
              CaseID,
              Worker,
              Name
            )
    VALUES  (
@Type,
              @CaseID,
              @Worker,
              @Name
            );
SELECT SCOPE_IDENTITY() AS ID',
N'
     @Type varchar(7),
    @CaseID CHAR(7),
    @Worker CHAR(6),
    @Name VARCHAR(50)
    ',{0},{1},{2},{3}";
}

检查带有填充参数的sql语句

用替换sql语句的{0},{1},{2},{3}部分

@Type=@Type, @CaseID=@CaseID, @Worker=@Worker, @Name=@Name

sqlStatement方法中的参数格式适合使用.net string.Format方法,但您需要的是适合sp_executeSql的SQL参数映射的格式。


EDIT:如果不能修改sqlStatement,可以将其提供给具有所需参数的string.Format方法。我的猜测是,如果它已经被使用,那么它已经存在于代码中的某个地方。不管怎样,它应该是这样的:

string statement = string.Format(sqlStatement(), "@Type=@Type", "@CaseID=@CaseID", "@Worker=@Worker", "@Name=@Name");
sqlDataAdapter.InsertCommand = new SqlCommand(statement,(SqlConnection)Connection);

在不对特定代码发表评论的情况下,通常,查看SQL实际执行情况的100%有效方法是使用SQL事件探查器捕获它。您可能希望在探查器中捕获SQL:BatchStarting事件,以查看代码实际传递给服务器的语句和参数。

请参阅:http://msdn.microsoft.com/en-us/library/ms181091(v=sql.120).aspx