[求助] 寻求一个C#向SQLServer提交大二进制数据的例子! 不会C#,也不会SqlServer,目前想使用C#向SqlServer插入图片,但是不知道该怎么写,请那位给一个例子!不胜感激! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://dotnet.aspx.cc/article/ey1xldyv-pidf-43lo-1wfl-fmy5ale1f635/read.aspxhttp://dotnet.aspx.cc/article/2a5dd7c6-a45a-48ab-a2e8-342a29f17506/read.aspx /// <summary> /// 将附件上传到指定表指定行的指定字段中 /// </summary> /// <param name="aTbName">表名</param> /// <param name="aId">主键ID</param> /// <param name="aImgColumne">Image字段名称</param> /// <param name="aStream">流</param> /// <param name="conn">数据库连接</param> /// <returns>true-附件上传成功 false-附件上传失败</returns> public bool UpLoad(string aTbName,string aId,string aImgColumne, Stream aStream,SqlConnection conn) { SqlCommand setPtr; SqlCommand getPtr; int bufferLen; SqlCommand appendToFile; SqlParameter ptrParm; SqlParameter offsetParm; SqlParameter fileParm; BinaryReader br; int offset_ctr; //SqlConnection conn; //conn = new Sys().GetDbConnection(); if (conn.State != ConnectionState.Open) { conn.Open(); } // 先将字段中的内容清空 setPtr = new SqlCommand("update " + aTbName + " set " + aImgColumne + "=null WHERE id = " + aId + " ", conn); setPtr.ExecuteNonQuery(); // image 列的文本指针值 getPtr = new SqlCommand("SELECT textptr( " + aImgColumne + ") FROM " + aTbName + " WHERE id = " + aId + " ", conn); // 设置缓存的长度 bufferLen = 32768; // 设置上传文件的 sql 语句 appendToFile = new SqlCommand("UPDATETEXT " + aTbName + "."+aImgColumne+" @Pointer @Offset 0 @Bytes", conn); // 设置上传文件的文本指针 ptrParm = appendToFile.Parameters.Add("@Pointer", SqlDbType.Binary, 16); ptrParm.Value = getPtr.ExecuteScalar(); // 文本列中的起始位置 offsetParm = appendToFile.Parameters.Add("@Offset", SqlDbType.Int); offsetParm.Value = 0; // fileParm = appendToFile.Parameters.Add("@Bytes", SqlDbType.Image); br = new BinaryReader(aStream); Byte[] buffer = br.ReadBytes(bufferLen); offset_ctr = 0; try { // 上传文件 while( buffer.Length > 0) { fileParm.Value = buffer; appendToFile.ExecuteNonQuery(); offset_ctr += bufferLen; offsetParm.Value = offset_ctr; buffer = br.ReadBytes(bufferLen); } } catch(SqlException) { //throw ex; return false; } finally { br.Close(); conn.Close(); } return true; }这是偶公用类中的一个方法,就是楼主说的这个东东 给楼主一个存图片二进制的例子吧:private void button1_Click(object sender, EventArgs e){ OpenFileDialog of = new OpenFileDialog(); if (of.ShowDialog(this) == DialogResult.OK) { Image img = Image.FromFile(of.FileName); MemoryStream ms = new MemoryStream(); img.Save(ms, img.RawFormat); string sql = "insert into Pictures (Name, Photo) Values(@Name, @Photo)"; SqlConnection cn = new SqlConnection(); cn.ConnectionString = this.txtConnect.Text; cn.Open(); SqlCommand cm = cn.CreateCommand(); cm.CommandText = sql; cm.Parameters.Add("@Name", SqlDbType.VarChar, 500).Value = of.FileName; cm.Parameters.Add("@Photo", SqlDbType.Image).Value = ms.GetBuffer(); cm.ExecuteNonQuery(); }} 对对,lovvver(www.notsoft.cn)说的对!谢谢![email protected] 考勤系统的设计问题 Access数据库类型问题 c#中图片色彩问题 求助,如何读取正在使用的文件 哪位懂用c#编记事本??? 数据库连接字符串 "无法识别的转义序列" 菜鸟问题 ArrayList.Toarray(System.Type type) 谁给我一个用oracleclient访问数据库的代码啊,给分100 如何在.NET开发环境中为控件写事件与方法的代码? VS2005里怎样修改配置文件里的数据库连接字符串? 求一Sql语句:
http://dotnet.aspx.cc/article/2a5dd7c6-a45a-48ab-a2e8-342a29f17506/read.aspx
/// 将附件上传到指定表指定行的指定字段中
/// </summary>
/// <param name="aTbName">表名</param>
/// <param name="aId">主键ID</param>
/// <param name="aImgColumne">Image字段名称</param>
/// <param name="aStream">流</param>
/// <param name="conn">数据库连接</param>
/// <returns>true-附件上传成功 false-附件上传失败</returns>
public bool UpLoad(string aTbName,string aId,string aImgColumne,
Stream aStream,SqlConnection conn)
{
SqlCommand setPtr;
SqlCommand getPtr;
int bufferLen;
SqlCommand appendToFile;
SqlParameter ptrParm;
SqlParameter offsetParm;
SqlParameter fileParm;
BinaryReader br;
int offset_ctr;
//SqlConnection conn; //conn = new Sys().GetDbConnection();
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
// 先将字段中的内容清空
setPtr = new SqlCommand("update " + aTbName + " set " + aImgColumne + "=null WHERE id = " + aId + " ", conn);
setPtr.ExecuteNonQuery(); // image 列的文本指针值
getPtr = new SqlCommand("SELECT textptr( " + aImgColumne + ") FROM " + aTbName + " WHERE id = " + aId + " ", conn); // 设置缓存的长度
bufferLen = 32768; // 设置上传文件的 sql 语句
appendToFile = new SqlCommand("UPDATETEXT " + aTbName + "."+aImgColumne+" @Pointer @Offset 0 @Bytes", conn);
// 设置上传文件的文本指针
ptrParm = appendToFile.Parameters.Add("@Pointer", SqlDbType.Binary, 16);
ptrParm.Value = getPtr.ExecuteScalar(); // 文本列中的起始位置
offsetParm = appendToFile.Parameters.Add("@Offset", SqlDbType.Int);
offsetParm.Value = 0; //
fileParm = appendToFile.Parameters.Add("@Bytes", SqlDbType.Image);
br = new BinaryReader(aStream); Byte[] buffer = br.ReadBytes(bufferLen);
offset_ctr = 0; try
{
// 上传文件
while( buffer.Length > 0)
{
fileParm.Value = buffer;
appendToFile.ExecuteNonQuery();
offset_ctr += bufferLen;
offsetParm.Value = offset_ctr;
buffer = br.ReadBytes(bufferLen);
}
}
catch(SqlException)
{
//throw ex;
return false;
}
finally
{
br.Close();
conn.Close();
}
return true;
}这是偶公用类中的一个方法,就是楼主说的这个东东
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog of = new OpenFileDialog();
if (of.ShowDialog(this) == DialogResult.OK)
{
Image img = Image.FromFile(of.FileName);
MemoryStream ms = new MemoryStream();
img.Save(ms, img.RawFormat);
string sql = "insert into Pictures (Name, Photo) Values(@Name, @Photo)";
SqlConnection cn = new SqlConnection();
cn.ConnectionString = this.txtConnect.Text;
cn.Open();
SqlCommand cm = cn.CreateCommand();
cm.CommandText = sql;
cm.Parameters.Add("@Name", SqlDbType.VarChar, 500).Value = of.FileName;
cm.Parameters.Add("@Photo", SqlDbType.Image).Value = ms.GetBuffer();
cm.ExecuteNonQuery();
}
}