2012-08-19 26 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

相關問題