2012-08-19 25 views
0

我得到这个错误:SqlCommand的参数化SQL错误:必须声明标量变量 “@ObjectType”

Must declare the scalar variable "@ObjectType".

任何想法,为什么?如果我硬编码值,查询工作。

public static DataSet GetDatabaseObjectHistory(string objectType, 
               string schemaName, 
               string objectName, 
               string msConnectionString) 
{ 
    using (SqlConnection sqlConnection = new SqlConnection() 
         { 
          ConnectionString = msConnectionString 
         }) 
    { 
     sqlConnection.Open(); 

     using (DataSet ds = new DataSet()) 
     { 
      #region sqlGetSchemaObjects 
      const string sql = @"SELECT 
              RowId 
              ,EventTime 
              ,LoginName 
              ,UserName 
              ,DatabaseName 
              ,SchemaName 
              ,ObjectName 
              ,ObjectType 
              ,DDLCommand 
             FROM 
              Audit_Log 
             WHERE 
              Audit_Log.ObjectType = @ObjectType AND 
              Audit_Log.SchemaName = @SchemaName AND 
              Audit_Log.ObjectName = @ObjectName"; 
      #endregion 

      SqlCommand sqlCommand = new SqlCommand(sql, sqlConnection); 
      sqlCommand.CommandType = CommandType.Text; 

      sqlCommand.Parameters.AddWithValue("@ObjectType", objectType); 
      sqlCommand.Parameters.AddWithValue("@SchemaName", schemaName); 
      sqlCommand.Parameters.AddWithValue("@ObjectName", objectName); 

      using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sql, sqlConnection)) 
      { 
       sqlDataAdapter.Fill(ds, sql); 
      } 

      ds.Tables[0].TableName = "Object History"; 
      return ds; 
     } 
    } 
    return null; 
} 

回答

1

尝试以下操作:

public static DataSet GetDatabaseObjectHistory(
    string objectType, 
    string schemaName, 
    string objectName, 
    string msConnectionString 
) 
{ 
    const string sql = 
     @"SELECT 
       RowId, 
       EventTime, 
       LoginName, 
       UserName, 
       DatabaseName, 
       SchemaName, 
       ObjectName, 
       ObjectType, 
       DDLCommand 
      FROM 
       Audit_Log 
      WHERE 
       Audit_Log.ObjectType = @ObjectType AND 
       Audit_Log.SchemaName = @SchemaName AND 
       Audit_Log.ObjectName = @ObjectName 
     "; 

    using (SqlConnection con = new SqlConnection(msConnectionString)) 
    using (SqlCommand cmd = con.CreateCommand()) 
    { 
     con.Open(); 
     cmd.CommandText = sql; 

     cmd.Parameters.AddWithValue("@ObjectType", objectType); 
     cmd.Parameters.AddWithValue("@SchemaName", schemaName); 
     cmd.Parameters.AddWithValue("@ObjectName", objectName); 

     using (SqlDataAdapter da = new SqlDataAdapter(cmd)) 
     { 
      DataSet ds = new DataSet(); 
      da.Fill(ds); 
      ds.Tables[0].TableName = "Object History"; 
      return ds; 
     } 
    } 
} 
+0

其实,你给了我一个错误,但你让我沿着正确的轨道思考。看我的帖子。 – ChadD 2012-08-19 07:44:31

相关问题