编程访问带有varbinrany参数的存储过程(C#与ado版)

存储过程:

CREATE  PROCEDURE Zzd

@A1 varbinary(8000)
AS

GO

 

C#:
   SqlConnection cn=null;
   SqlCommand    cmd=null;
   try
   {
    cn=new SqlConnection();
    cn.ConnectionString="data source=192.168.0.199;initial catalog=haha;user id=sa;password=sa";
    cn.Open();
    cmd=cn.CreateCommand();
    cmd.CommandType=CommandType.Text;
    cmd.CommandText="exec zzd @A1";

    SqlParameter param= new SqlParameter();
    param.ParameterName="@A1";
    param.DbType=DbType.Binary;
    param.Direction=ParameterDirection.Input;
    byte [] a=new byte[200];
    SqlBinary bin=new SqlBinary(a);
    param.Value=bin;
    cmd.Parameters.Add(param);

    cmd.ExecuteNonQuery();
   }
   catch(Exception e1)
   {
    string a11=e1.Message;
   }

   if(cmd!=null)
    cmd=null;
   if(cn!=null)
   {
    cn.Close();
    cn=null;
   }

Ado:

 CoInitialize(NULL);
 {
  _ConnectionPtr cn;
  _CommandPtr    cmd;
  _ParameterPtr  para;
  SAFEARRAY *psa=NULL;
  para.CreateInstance(__uuidof(Parameter));
   try
   {
    cn.CreateInstance(__uuidof(Connection));
    cmd.CreateInstance(__uuidof(Command));
    para.CreateInstance(__uuidof(Parameter));

    cn->ConnectionString="Provider=SQLOLEDB.1;User ID=sa;password=sa;Initial Catalog=haha;Data Source=192.168.0.199";
    cn->Open( _bstr_t(L""), _bstr_t(L""), _bstr_t(L""), -1 );
    cmd->ActiveConnection=cn;
    cmd->CommandType=adCmdText;
    cmd->CommandText="exec zzd ?";

    //para->Name=_bstr_t("@A1");
    para->Type=adVarBinary;
    para->Size=8000;
    para->Direction=adParamInput;

    SAFEARRAY *psa;
    SAFEARRAYBOUND rgsabound[1];
    rgsabound[0].lLbound = 0;
    rgsabound[0].cElements = 100;
    psa = SafeArrayCreate(VT_UI1, 1, rgsabound); ///创建SAFEARRAY对象
    char  pChar='C';
            
    //复制数据
    for (long i = 0; i < (long)100; i++)
     SafeArrayPutElement (psa, &i, &pChar);

    VARIANT varBLOB;
    varBLOB.vt = VT_ARRAY | VT_UI1;//varBLOB的类型设置为BYTE类型的数组
    varBLOB.parray = psa;
    para->Value=varBLOB;
    cmd->Parameters->Append(para);
    cmd->Execute(NULL, NULL, adCmdText);
   }
   catch (_com_error &e)
   {
    _bstr_t bstrError = e.Description();
    CString m_strError = (LPCTSTR)bstrError;

   }
   if(psa!=NULL)
   {
    SafeArrayDestroy(psa);
   }
   if(cmd!=NULL)
   {
    cmd=NULL;
   }
   if(cn!=NULL)
   {
    cn->Close();
    cn=NULL;
   }
 }
 CoUninitialize();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值