photo应该是一个一个添加的吧
下面是一个将转换为byte[],然后直接添加此参数
//实例化一个文件流,与写入文件相关联
FileStream fs = new FileStream(photoPath, FileModeOpen, FileAccessRead, FileShareReadWrite);
//获得字节数组
byte[] photoData = new byte[fsLength];
//开始写入
fsRead(photoData, 0, imgDataLength);
//关闭流
fsClose();
……
//photo字段在数据库中为image类型(二进制数据)
cmdParametersAdd("@Photo", SqlDbTypeImage)Value = photoData;
cmdExecuteNonQuery();
另外,你的sql语句也太复杂了,其实,即使是数字,在数据库中也可以设置为varchar类型,如果数据是从textbox中添加的(textbox中的值是string类型),就不需要类型转换了。
string sql = stringFormat("insert into EM_Name values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}',{9},{10})", pmNo, pmName, pmRfidone, pmRfidtwo, pmRfidthree,pmPhoto, pmSex, pmPhone, pmPichi, pmType,pmGroup);
nvarchar 和 varchar 的区别是存储方式不同
varchar是按字节存储的而nvarchar是按字符存储的
比如说 varchar(40),能存储40个字节长度的字符,存储中文字符的时候,因为中文字符1个字符就等于2个字节所以varchar(40)只能存储20个中文字符
nvarchar(40),就可以存储40个中文字符,也就是说可以存储80个字节长度的字符nvarchar要相对于存储的字符类型比如有些字符是占3个字节的
同样的,char和nchar也一样道理。
char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值。当你输入的字符大于指定的数时,它会截取超出的字符。
varchar是变长型,它的存储空间会跟你输入的实际字符数而改变,但最大长度不能超过你指定的长度。
nvarchar是unicode的变长型,它和char的区别很明显了,它和varchar的区别主要是存储空间大,相同长度下能容内更多的字符。
你把一下的代码加入到一个类里就可以了,我已经测试过了,由于字数的限制不能把完整的类发上来。
String PSQL = "insert into TESTBLOB(NUMCONTENTID,BLOBCONTENT) " + "values(,EMPTY_BLOB())";
String SSQL = "select BLOBCONTENT from TESTBLOB where NUMCONTENTID = for update";
String USQL = "update TESTBLOB set BLOBCONTENT = where NUMCONTENTID = ";
public WriteBLOB() throws Exception {
Connection conn = null;
try {
conn = getConnection();
connsetAutoCommit(false);
ByteBuffer bb = ByteBufferallocate(10836);
bbposition(0);
bbputInt(1);
//调用 insertBLOB 方法 的contentid 应该使用序列这里为了简单就直接写死了
//下面的插入方式应该是你想要的方法 在数据库中会看到 0000 0001 0000 0000 0000
//但是你这里好像没有真正的是用 ByteBuffer
byte [] b1 = bbarray();
insertBLOB(conn, 1, b1);
//下面是使用 ByteBuffer 后的插入 在数据库中会看到 0000 0001
//不知道你想要什么样子的,你自己选择不吧
bbflip();
byte [] b2 = new byte [bbremaining()];
bbget(b2);
insertBLOB(conn, 2, b2);
} catch (Exception ex) {
exprintStackTrace();
connrollback();
} finally {
if (conn != null)
connclose();
}
}
public void insertBLOB(Connection conn, int contentid, byte[] content)
throws Exception {
PreparedStatement pstmt = null;
PreparedStatement pstmt2 = null;
int id = contentid;
try {
pstmt = connprepareStatement(PSQL);
pstmt2 = connprepareStatement(USQL);
pstmtsetInt(1, id);
try {
pstmtexecuteUpdate();//在数据库中插入空对象
} catch (SQLException ex) {
exprintStackTrace();
}
pstmt = connprepareStatement(SSQL);
pstmtsetInt(1, id);
ResultSet rs = pstmtexecuteQuery();//查询新插入的记录
oraclesqlBLOB pc = null;
while (rsnext()) {
pc = (oraclesqlBLOB) rsgetBlob(1);
}
byte[] data = content;
pcputBytes(1, data);
pstmt2setBlob(1, pc);
pstmt2setInt(2, id);
pstmt2executeUpdate();
} finally {
try {
pstmtclose();
pstmt2close();
} catch (Exception EE) {
}
}
return;
}
保存字节数组到数据库分两步:
第一、利用FileInputStreamread(byte[])方法把内容读取到byte[]数组中,比如是由二进制数组成的,就可以定义为一个字节数组。
第二、在数据库中对应记录字段应该设置为blob类型,这样就能够顺利保存了
事例代码如下:
PreparedStatement stmt = connectiongeneratePreparedStatement("INSERT INTO ");
stmtsetBytes(1, yourByteArray);
其中,yourByteArray是你读出来的字符数组。
以上就是关于C# winfrom 如何将byte 用sql语句加入数据库全部的内容,包括:C# winfrom 如何将byte 用sql语句加入数据库、关于SQL数据库字符和字节 急!!!!!!、java中向oracle数据库blob字段中插入byte[]相关问题, 高人来.等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)