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