1、建议使用存储过程;
2、如果一定要使用text,建议还是跟sp一样的使用sqlparameter对象这样的好处就是,它可以在内部实现你的数据类型转换(就连stream到byte[]的转换都不需要了)3、使用MSDN帮助里面的那个例子,即用一个空的image占位(insert),然后根据此记录的PK获取刚才那个image的指针,然后给这个指针加上stream的地址(这一步用C#写),然后在用update语句(还是要用sqlparameter)
2、如果一定要使用text,建议还是跟sp一样的使用sqlparameter对象这样的好处就是,它可以在内部实现你的数据类型转换(就连stream到byte[]的转换都不需要了)3、使用MSDN帮助里面的那个例子,即用一个空的image占位(insert),然后根据此记录的PK获取刚才那个image的指针,然后给这个指针加上stream的地址(这一步用C#写),然后在用update语句(还是要用sqlparameter)
解决方案 »
- 问一条查询语句
- 求救~~~~~
- SQL server 2008发布 订阅问题
- 跪求,这三条语句合一条应该怎么写啊~~~解决结贴
- t-sql高手来救命!!!
- 谁能帮忙写个这样的SQLServer的存储过程?数据表名Aed108,列名,dd_date(datetime类型),dm(int类型),主键:(dd_date,dm复合),存储过程
- 求一存储过程写法
- 关于关系中函数依赖的问题
- 挑战SQLServer极限三:varbinary的限制
- 提高两表间之批量insert\update的效率(望各大高手多来发表高见)
- 请问如何把SQL 2005的SP1补丁包集成到SQL 2005的安装光盘中?
- 关于存储过程返回记录集的问题,求各位大哥帮忙解答
这个是MSDN library中的地址
using System.Data;
using System.Data.SqlClient;
using System.IO;public class EmployeeData
{
public static void Main()
{
DateTime hireDate = DateTime.Parse("4/27/98");
int newID = AddEmployee("Smith", "John", "Sales Representative", hireDate, 5, "smith.bmp");
Console.WriteLine("New Employee added. EmployeeID = " + newID);
} public static int AddEmployee(string lastName, string firstName, string title, DateTime hireDate , int reportsTo, string photoFilePath)
{
SqlConnection nwindConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"); SqlCommand addEmp = new SqlCommand("INSERT INTO Employees (LastName, FirstName, Title, HireDate, ReportsTo, Photo) " +
"Values(@LastName, @FirstName, @Title, @HireDate, @ReportsTo, 0x0);" +
"SELECT @Identity = SCOPE_IDENTITY();" +
"SELECT @Pointer = TEXTPTR(Photo) FROM Employees WHERE EmployeeID = @Identity", nwindConn); addEmp.Parameters.Add("@LastName", SqlDbType.NVarChar, 20).Value = lastName;
addEmp.Parameters.Add("@FirstName", SqlDbType.NVarChar, 10).Value = firstName;
addEmp.Parameters.Add("@Title", SqlDbType.NVarChar, 30).Value = title;
addEmp.Parameters.Add("@HireDate", SqlDbType.DateTime).Value = hireDate;
addEmp.Parameters.Add("@ReportsTo", SqlDbType.Int).Value = reportsTo; SqlParameter idParm = addEmp.Parameters.Add("@Identity", SqlDbType.Int);
idParm.Direction = ParameterDirection.Output;
SqlParameter ptrParm = addEmp.Parameters.Add("@Pointer", SqlDbType.Binary, 16);
ptrParm.Direction = ParameterDirection.Output; nwindConn.Open(); addEmp.ExecuteNonQuery(); int newEmpID = (int)idParm.Value; StorePhoto(photoFilePath, (byte[])ptrParm.Value, nwindConn); nwindConn.Close(); return newEmpID;
} public static void StorePhoto(string fileName, byte[] pointer, SqlConnection nwindConn)
{
int bufferLen = 128; // The size of the "chunks" of the image. SqlCommand appendToPhoto = new SqlCommand("UPDATETEXT Employees.Photo @Pointer @Offset 0 @Bytes", nwindConn); SqlParameter ptrParm = appendToPhoto.Parameters.Add("@Pointer", SqlDbType.Binary, 16);
ptrParm.Value = pointer;
SqlParameter photoParm = appendToPhoto.Parameters.Add("@Bytes", SqlDbType.Image, bufferLen);
SqlParameter offsetParm = appendToPhoto.Parameters.Add("@Offset", SqlDbType.Int);
offsetParm.Value = 0; //''''''''''''''''''''''''''''''''''
// Read the image in and write it to the database 128 (bufferLen) bytes at a time.
// Tune bufferLen for best performance. Larger values write faster, but
// use more system resources. FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs); byte[] buffer = br.ReadBytes(bufferLen);
int offset_ctr = 0; while (buffer.Length > 0)
{
photoParm.Value = buffer;
appendToPhoto.ExecuteNonQuery();
offset_ctr += bufferLen;
offsetParm.Value = offset_ctr;
buffer = br.ReadBytes(bufferLen);
} br.Close();
fs.Close();
}
}
这是MSDN中的例子,不是我写的啊
hoho
不过我也不会用这样的例子,太麻烦了