Odbc存储过程参数,找不到Syntac错误? [英] Odbc stored procedure Parameters, can't find Syntac error?

查看:72
本文介绍了Odbc存储过程参数,找不到Syntac错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,

我需要一些将参数传递给存储过程的帮助,首先是我的代码:

Hey Guys,

I need some help passing my params to a stored Procedure, First heres my code:

string connetionString = null;
      OdbcConnection connection;
      OdbcDataAdapter adapter;
      OdbcCommand command = new OdbcCommand();
      OdbcParameter param;
      OdbcParameter param2;
      OdbcParameter param3;
      DataSet ds = new DataSet();

      int i = 0;

      connetionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString2"].ConnectionString;
      connection = new OdbcConnection(connetionString);

      connection.Open();
      command.Connection = connection;
      command.CommandType = CommandType.StoredProcedure;
      command.CommandText = "p_GetUnitsDetail_p (?, ?, ?)";


      param = new OdbcParameter("@OrgId", "CBS");
      param.Direction = ParameterDirection.Input;
      param.DbType = DbType.String;
      command.Parameters.Add(param);

      param2 = new OdbcParameter("@ProductId", "AGR");
      param2.Direction = ParameterDirection.Input;
      param2.DbType = DbType.String;
      command.Parameters.Add(param2);

      param3 = new OdbcParameter("@MPAcc", "55315628");
      param3.Direction = ParameterDirection.Input;
      param3.DbType = DbType.String;
      command.Parameters.Add(param3);


      adapter = new OdbcDataAdapter(command);
      adapter.Fill(ds);

      for (i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
      {
          Label1.Text = (ds.Tables[0].Rows[i][0].ToString());
      }

      connection.Close();



当我使用以下命令运行代码时,效果很好:



It works fine when i run the code with the command like this:

command.CommandText = "p_GetUnitsDetail_p (CBS, AGR, 55315628)";



但是当我尝试指定参数时出现错误:

''@ 0001''附近的语法不正确

请帮助



But when i try to specify params i get the error:

Incorrect syntax near ''@0001''

Please help

推荐答案

您好,

您由于错误的参数传递方法而出错.

如果您想传递参数,则需要指定like

Hi,

you are getting error because of incorrect parameter passing method.

if you would like to pass parameter you need to specify like

if (parameters != default(IList<sqlparameter>) && parameters.Count > 0) 
   {
      parameters.ToList().ForEach(p =>
      {
      sqlCommand.Parameters.Add(p);
      });
   }
</sqlparameter>



尽管上面的示例与SqlParameter一起使用,但是OdbcParameter具有相似的方法和属性.


希望这对您有帮助,

谢谢
-Amit.



Although above example is with SqlParameter but OdbcParameter have similar method and property.


Hope this will help you,

Thanks
-Amit.




谢谢阿米特,我使用了一个不同的示例及其工作方式!

代码如下:

OdbcConnection cn;
OdbcCommand cmd;
OdbcParameter prm;
OdbcParameter prm2;
OdbcParameter prm3;
OdbcDataReader dr;
字符串connetionString = System.Configuration.ConfigurationManager.ConnectionStrings ["ConnectionString2"].ConnectionString;

//更改连接字符串以使用您的SQL Server.
cn =新的OdbcConnection(connetionString);

//使用ODBC调用语法.
cmd = new OdbcCommand("{call p_GetUnitsDetail_p(?,?,?)}",cn);

prm = cmd.Parameters.Add("@ OrgId",OdbcType.Char,5);
prm.Value ="CBS";
prm2 = cmd.Parameters.Add("@ ProductId",OdbcType.Char,5);
prm2.Value ="AGR";
prm2 = cmd.Parameters.Add("@ MPAcc",OdbcType.Char,20);
prm2.Value ="55315628";

cn.Open();

dr = cmd.ExecuteReader();

//列出每个产品.
while(dr.Read())
Label1.Text = dr.GetString(0);

//清理.
dr.Close();
cn.Close();
Hi,

Thanks Amit, I used a different example and its working!

Here''s the code:

OdbcConnection cn;
OdbcCommand cmd;
OdbcParameter prm;
OdbcParameter prm2;
OdbcParameter prm3;
OdbcDataReader dr;
string connetionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString2"].ConnectionString;

//Change the connection string to use your SQL Server.
cn = new OdbcConnection(connetionString);

//Use ODBC call syntax.
cmd = new OdbcCommand("{call p_GetUnitsDetail_p (?,?,?)}", cn);

prm = cmd.Parameters.Add("@OrgId", OdbcType.Char, 5);
prm.Value = "CBS";
prm2 = cmd.Parameters.Add("@ProductId", OdbcType.Char, 5);
prm2.Value = "AGR";
prm2 = cmd.Parameters.Add("@MPAcc", OdbcType.Char, 20);
prm2.Value = "55315628";

cn.Open();

dr = cmd.ExecuteReader();

//List each product.
while (dr.Read())
Label1.Text = dr.GetString(0);

//Clean up.
dr.Close();
cn.Close();


这篇关于Odbc存储过程参数,找不到Syntac错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆