C# winfrom 如何将byte 用sql语句加入数据库

C# winfrom 如何将byte 用sql语句加入数据库,第1张

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[]相关问题, 高人来.等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9265771.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存