编程访问带有varbinrany参数的存储过程(C#与ado版)
2004-09-21 13:48
351 查看
存储过程:
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();
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();
相关文章推荐
- 如何使用 ADO.NET 和 Visual C# .NET 调用带参数的存储过程
- ADO调用带有参数的存储过程
- 用ADO访问存储过程的参数问题
- C# 调用带有输出参数的分页存储过程
- 【转】如何使用 ADO.NET 和 Visual C# .NET 调用带参数的存储过程
- C#数据库编程 之 ADO.NET的数据库访问小结
- C# 读取存储过程输出参数,始终是常数问题,原来是C#定义输出参数时,定义格式的问题
- 存储过程有输出参数,在c#中用nhibernate调用存储过程时,如何才能获取到一个结果集和这个输出参数呢?
- c#调用存储过程时 SqlParameter 中传递参数时ref参数的设置方法
- MSSQLSERVER数据库- C#里调用存储过程,多参数查询,个人记录
- c#中自动配置存储过程所需参数
- c#winform编程 窗体之间传递参数问题总结(转)
- C#接收存储过程返回值和输出参数
- C# 通过ado.net 访问oracle
- C# 数据库访问通用类 (ADO.NET)
- 类型参数的约束(C# 编程指南)
- 使用 ADO.NET 访问 Oracle 9i 存储过程
- [C#]ADO访问多数据库的C#库
- c#带输入输出参数调用存储过程
- C#操作存储过程,输入参数,返回结果