问题描述
环境:vb2005xp(win7)数据库:access表名:Dat字段:a(string类型),b(int类型),c(date类型),d(OLE类型)对应变量:strA,intB,dateC,oleD,strA=“ABC的”intB=50dateC=2016-03-0315:16:15oled=一个数组,数组内容为byte类型数据我要向这个表插入数据,sql语句如下InsertintoDat(a,b,c,d)values(问题在这里:这里怎么写???)'"+strA+"','"&intB&"','"+dateC+"','"+这里怎么写?+"')"是这样么?其实就是连接符问题文本类型连接符是+?数字类型连接符是&?日期时间类型连接符是+?OLE类型连接符是??如果能按我举得例子给我写下具体的SQL语句哪就更好了:)
解决方案
解决方案二:
不能拼sql字符串,应该用参数化sql:OleDbConnectioncn=newOleDbConnection("连接字符串");OleDbCommandcmd=newOleDbCommand("insertintoDat(a,b,c,d)values(?,?,?,?)",cn);cmd.Parameters.AddWithValue("?",strA);cmd.Parameters.AddWithValue("?",intB);cmd.Parameters.AddWithValue("?",dateC);cmd.Parameters.AddWithValue("?",oled);cn.Open();cmd.ExecuteNonQuery();cn.Close();
解决方案三:
引用1楼dalmeeme的回复:
不能拼sql字符串,应该用参数化sql:OleDbConnectioncn=newOleDbConnection("连接字符串");OleDbCommandcmd=newOleDbCommand("insertintoDat(a,b,c,d)values(?,?,?,?)",cn);cmd.Parameters.AddWithValue("?",strA);cmd.Parameters.AddWithValue("?",intB);cmd.Parameters.AddWithValue("?",dateC);cmd.Parameters.AddWithValue("?",oled);cn.Open();cmd.ExecuteNonQuery();cn.Close();
你好,你这个方法中在cmd.ExecuteNonQuery()这句时会出错,我除去cmd.Parameters.AddWithValue("?",oled);这句的话,就会正常,是不是不能直接将byte类型数组存放至access的ole类型字段内?我在vb6下用的是这样的方法:OpenApp.Path+"wen.txt"ForBinaryAccessReadAs1#l=LOF(1#)'Debug.PrintlReDimBuf(l)AsByteGet1#,,BufClose1#DatWenDu.Recordset.Fields("温度")=Buf
在vb2005中我不清楚该怎么改写这段程序了?可否解释下?多谢
解决方案四:
抛出什么异常信息?
解决方案五:
引用3楼dalmeeme的回复:
抛出什么异常信息?
标题为:未处理oleDbException内容为:多步OLEDB操作产生错误。如果可能,请检查每个OLEDB状态值,没有工作被完成
解决方案六:
你的byte数组里装的什么东西?有可能是你的byte[]太大了,长度超过该字段的限制,
解决方案七:
引用5楼dalmeeme的回复:
你的byte数组里装的什么东西?有可能是你的byte[]太大了,长度超过该字段的限制,
目前我自己做的例子里,是64个数据,温度数据,每个数据都是15.3类似这样的数据。我原来VB6用的那种分块,保存的方法,在2005中不能用么?
解决方案八:
我这里测试存入一个文件到数据库中是没问题的,不知道你为什么不行。
解决方案九:
引用7楼dalmeeme的回复:
我这里测试存入一个文件到数据库中是没问题的,不知道你为什么不行。
问题可能出在这里,你是怎么吧一个文件读到变量里再保存到数据库的?我是直接保存这个数组,结果出错了。
解决方案十:
byte[]values=File.ReadAllBytes(@"c:a.txt");//读取文件到values......cmd.Parameters.AddWithValue("?",values);//添加第三个参数,并指定它的值是values
解决方案十一:
引用9楼dalmeeme的回复:
byte[]values=File.ReadAllBytes(@"c:a.txt");//读取文件到values......cmd.Parameters.AddWithValue("?",values);//添加第三个参数,并指定它的值是values
太感谢你了。按照这个方法我已经保存进去了。可以再问下,我怎么从数据库中取出这个OLE数据么?取出后怎么还原成原来的数组格式?
解决方案十二:
引用10楼LIXIYO的回复:
Quote: 引用9楼dalmeeme的回复:
byte[]values=File.ReadAllBytes(@"c:a.txt");//读取文件到values......cmd.Parameters.AddWithValue("?",values);//添加第三个参数,并指定它的值是values太感谢你了。按照这个方法我已经保存进去了。可以再问下,我怎么从数据库中取出这个OLE数据么?取出后怎么还原成原来的数组格式?
我现在用的笨办法是,倒着推回去dimRedFile()asbyteFile.WriteAllBytes(Application.StartupPath+"wen2.txt",RedFile)这样把数据再保存到一个文本文件里,然后再读取出来到数组内。不知道有没有更方便的方法?
解决方案十三:
引用10楼LIXIYO的回复:
Quote: 引用9楼dalmeeme的回复:
byte[]values=File.ReadAllBytes(@"c:a.txt");//读取文件到values......cmd.Parameters.AddWithValue("?",values);//添加第三个参数,并指定它的值是values太感谢你了。按照这个方法我已经保存进去了。可以再问下,我怎么从数据库中取出这个OLE数据么?取出后怎么还原成原来的数组格式?
OleDbCommandcmd=newOleDbCommand("selectdfromDatwhere条件",cn);cn.Open();byte[]values=(byte[])cmd.ExecuteScalar();
以上是取满足指定条件的一条记录的d字段的值,还原成byte[]。
解决方案十四:
直接ORM吧http://pwmis.codeplex.com