5

我在調用下面的代碼。C#,sp_executesql和語法錯誤

上線(IDataReader dr = cmd.ExecuteReader())帶有的sql barfs'CompanyUpdate'附近的語法不正確。

using (SqlCommand cmd = new SqlCommand("CompanyUpdate")) 
     { 
      cmd.Parameters.Add("@CompanyID",SqlDbType.Int); 
      cmd.Parameters.Add("@Description",SqlDbType.VarChar,50); 
      cmd.Parameters["@CompanyID"].Value = companyid; 
      cmd.Parameters["@Description"].Value = description; 

      SqlConnection cn = new SqlConnection("Data Source=[datasource];Initial Catalog=dotNext;User ID=[user];Password=[password];Pooling=True;Application Name=dotNext"); 
      cn.Open(); 
      cmd.Connection = cn; 
      using (IDataReader dr = cmd.ExecuteReader()) 
      { 
       if (dr.Read()) 
       { 
        this.CompanyID = dr.GetInt32(0); 
       } 
      } 
     } 

我看了一下sqlprofiler,注意到以下幾點:

exec sp_executesql N'CompanyUpdate',N'@CompanyID int,@Description varchar(50)',@CompanyID=56,@Description='APC' 

包裝紙我的指揮機智sp_executesql的。我所有的其他sql命令都是在沒有問題的情況下執行的。

所以我的問題是兩個: 1.爲什麼它使用sp_executesql? 2.我做錯了什麼?

詳細信息:SQL2005,C#,VS2005

回答

11

我注意到,你沒有將CommandType設置爲StoredProcedure ...我不知道如果這是你的問題或沒有的原因:

cmd.CommandType = CommandType.StoredProcedure; 

我已經做了這麼多次我自己不能算。

提示觸發你的記憶時,這將引發異常下一次:當你運行你的應用程序

具有SQL查詢分析器打開。每個命令執行時,都會顯示在服務器端生成並運行的SQL。如果生成的SQL以sp_executesql開頭,然後是查詢,那麼它將作爲常規查詢運行 - 即cmd.CommandType = CommandType.Text,如果它以exec開頭,那麼它很可能會作爲存儲過程運行。確保您獲得了正在嘗試運行的查詢類型生成的正確SQL。

+1

這太惱人了!謝謝! – 2008-12-18 05:16:16