我有一個ASP.NET MVC網站與管理頁面,我需要合併兩個記錄。我輸入了兩個值:@old
和@new
。將這些添加到我的SqlCommand
對象後,我將其稱爲ExecuteNonQuery()
。這是生成與消息說異常SQL Server無法識別我的參數
存儲過程「FixDuplicate」希望這是 不提供
正如你可以看到下面的參數「@old」,我肯定添加參數。我試過的所有3個版本都在那裏。
這段代碼有什麼問題?
版本1:(請忽略這一塊的語法,我已經刪除了此代碼,但我沒有嘗試,並證實該參數存在,當它達到ExecuteNonQuery()
調用)
var sql = "FixDuplicate";
comm.Parameters.Add(new System.Data.SqlClient.SqlParameter("@old", model.Duplicate));
comm.Parameters.Add(new System.Data.SqlClient.SqlParameter("@new", model.Primary));
_dataAccessService.ExecuteSql(conn, comm);
版本2:
comm.Parameters.AddWithValue("@old", model.Duplicate);
comm.Parameters.AddWithValue("@new", model.Primary);
版本3:
comm.Parameters.Add("@old", System.Data.SqlDbType.Int);
comm.Parameters[0].Value = model.Duplicate;
comm.Parameters.Add("@new", System.Data.SqlDbType.Int);
comm.Parameters[1].Value = model.Primary;
最後,這裏是在_dataAccessService.ExecuteSql(conn, comm)
調用的代碼:
public void ExecuteSql(SqlConnection connection, SqlCommand command, bool closeConnection = true)
{
if (connection == null)
throw new ArgumentNullException("connection");
if (command == null)
throw new ArgumentNullException("command");
try
{
if (connection.State != ConnectionState.Open)
connection.Open();
try
{
command.ExecuteNonQuery();
}
catch
{
throw;
}
finally
{
if (closeConnection)
command.Dispose();
}
}
catch (Exception ex)
{
throw new Exception("Sorry, an error occurred ExecuteSql: " + ex.Message, ex);
}
finally
{
if (closeConnection)
connection.Dispose();
}
}
注:我已經證實,兩個「@old」和「@new」值設置當它到達ExecuteNonQuery()
一行。
編輯:下面是完整的代碼,因爲它的存在:
// Here we need to execute the "FixDuplicate" stored procedure
var sql = "FixDuplicate";
var conn = _dataAccessService.GetConnection("");
var comm = _dataAccessService.GetCommand(conn, sql, System.Data.CommandType.StoredProcedure);
//comm.Parameters.AddWithValue("@old", model.DuplicateWrestler);
//comm.Parameters.AddWithValue("@new", model.PrimaryWrestler);
comm.Parameters.Add("@old", System.Data.SqlDbType.Int);
comm.Parameters[0].Value = model.DuplicateWrestler;
comm.Parameters.Add("@new", System.Data.SqlDbType.Int);
comm.Parameters[1].Value = model.PrimaryWrestler;
_dataAccessService.ExecuteSql(conn, comm);
你有沒有想過創建一個自己的幫助類或自定義類,它傳遞參數並將它們添加到foreach循環中我會發佈一個你可以做的例子 – MethodMan
你確定model.Duplicate不是空值? – Salim
@Salim是的,我添加了一個「註釋」的問題... – ganders