sql = "insert into Sy_Data(Bdz_ID,Leixing_ID,Shebei_ID,RTime,DType,data) values("
+intBdz.ToString()+","+intLeixing.ToString()+","+intShebei.ToString()+",\'"
+strRtime.ToString()+"\',"+sDType+",@a)";  //",null)";

gDbConn.Open();  //使用ODBC的数据库连接,数据库是SQL Server
OdbcCommand cmd = new OdbcCommand(sql,gDbConn);
cmd.Parameters.Add("@a",OdbcType.Image).Value = dataArray;  //byte[] dataArray = new DataArray[256];

try
{
    cmd.ExecuteNonQuery();
}
catch (Exception er)
{
    MessageBox.Show("执行恢复的SQL语句出错误,错误信息为:"+er.ToString());
}出现错误,提示“必须声明变量@a”。

解决方案 »

  1.   

    @a使用占位符?来替换一下试试看、我想可能是odbc不支持命名参数。
      

  2.   

    cmd.Parameters.Add("@a",OdbcType.Binary).Value = dataArray;
      

  3.   

    ODBC .NET 提供程序在命令文本的语法中使用问号 (?) 标记的是定位参数而非命名参数。根据将 OdbcParameter 对象插入集合的顺序(而非按参数名称),OdbcParameterCollection 中的参数对象与存储过程或参数化 SQL 语句所接受的实际参数彼此对应。参数名称可以被提供,但在参数对象绑定期间将被忽略。下面的示例假定:数据源具有表名 MyTable 和名为 MyProc 的存储过程,其定义方式如下:  复制代码 
    CREATE TABLE MyTable (col1 int, col2 smallmoney, col3 decimal)
    CREATE PROC MyProc (@p1 int, @p2 smallmoney, @p3 decimal) AS INSERT INTO MyTable VALUES (@p1, @p2, @p3)
     
    public void CreateMyProc(OdbcConnection connection) 
    {
       OdbcCommand command = myConnection.CreateCommand();   command.CommandText = "{ call MyProc(?,?,?) }";
       command.Parameters.Add("", OdbcType.Int).Value = 1;
       command.Parameters.Add("", OdbcType.Decimal).Value = 2;
       command.Parameters.Add("", OdbcType.Decimal).Value = 3;
    }
      

  4.   

    TO:cpp2017原来的 “幕白兄”挺好的,怎么不显示了。
      

  5.   

    平民百姓 居然还认识我,hehe.换个签名....过两天换回来.
      

  6.   

    To cpp2017:
    还是原来的亲切些。