2014-03-19 212 views
0

我的存儲過程聲明如下所示:傳遞參數給存儲過程

alter procedure [dbo].[usp_A_MySproc] 
@aID int, 
@bID int, 
@cID int 

我在應用層代碼:

using (var transaction = Session.Transaction) 
{ 
    try 
     { 
      transaction.Begin(); 
      Session.CreateSQLQuery("exec usp_A_MySproc ?, ?, ?") 
       .SetParameter("aID", 1) 
       .SetParameter("bID", 2) 
       .SetParameter("cID", 3); 
       transaction.Commit();; 
     } 
} 

異常:「無法找到名爲參數[援助]」

你能看到錯誤的東西嗎?

謝謝!

回答

1

您需要通過位置來設置參數:

using (var transaction = Session.BeginTransaction()) 
{ 

    Session.CreateSQLQuery("exec usp_A_MySproc ?, ?, ?") 
      .SetInt32(0, aIDValue) 
      .SetInt32(1, bIDValue) 
      .SetInt32(2, cIDValue) 
      .ExecuteUpdate(); 

      transaction.Commit(); 
} 
+0

非常感謝! :) – Henrik

3

對於nhibernate

Session.CreateSQLQuery("exec usp_A_MySproc @aID = 1, @bID =2, @cID = 3") 

IQuery query = Session.CreateSQLQuery("exec usp_A_MySproc @aID =:aID, @bID =:bID , @cID =:cID"); 
query.SetInt32("aID",1); 
query.SetInt32("bID",2); 
query.SetInt32("cID",3); 
query.ExecuteUpdate(); 

或匹配你在做什麼

Session.CreateSQLQuery("exec usp_A_MySproc @aID =:aID, @bID =:bID , @cID =:cID") 
    .SetParameter("aID", 1) 
    .SetParameter("bID", 2) 
    .SetParameter("cID", 3); 

對於使用SqlCommand修改代碼以以下,connectionString個代表您的連接字符串

using (SqlConnection con = new SqlConnection(connectionString)) 
{  
    SqlCommand cmd = new SqlCommand("usp_A_MySproc ", con); 
    cmd.CommandType = CommandType.StoredProcedure; 

    cmd.Parameters.Add("@aID", SqlDbType.Int32).Value = 1; 
    cmd.Parameters.Add("@bID", SqlDbType.Int32).Value = 2; 
    cmd.Parameters.Add("@cID", SqlDbType.Int32).Value = 3; 

    try 
    { 
     con.Open(); 
     cmd.ExecuteNonQuery(); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 
} 

using (SqlConnection con = new SqlConnection(connectionString)) 
{  
    SqlCommand cmd = new SqlCommand("usp_A_MySproc ", con); 
    cmd.CommandType = CommandType.StoredProcedure; 

    cmd.Parameters.AddWithValue("@aID", 1) ; 
    cmd.Parameters.AddWithValue("@bID", 2) ; 
    cmd.Parameters.AddWithValue("@cID", 3) ; 

    try 
    { 
     con.Open(); 
     cmd.ExecuteNonQuery(); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 
} 

參考MSDN文章的SqlCommand如何正確添加參數

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters(v=vs.110).aspx

+0

這裏有很好的代碼示例,所以+1。 FWIW,'SqlCommand'實現了IDisposable,所以我總是把它包裝在'using'塊中。 – DMason

+0

謝謝。但我使用nhibernate作爲數據存儲器,所以我不能以某種方式使用它? – Henrik

相關問題