1. sql 如何读取Binary数据,请高手帮忙,急急!!
Sql Server的一个表中有一个字段为binary类型
当使用insert插入记录时可以使用'0x'开头的字符串来表示
empty binary strings代表 '0x'
例如:insert C(a) values(0x3439430949304) ,注意不要加引号
有一店你必须记住:字段a的长度必须小于或等于存入二进制数的长度
同样如果想在sql查询时使用0x开头的字符串表示binary类型的内容,可用
select convert(varbinary(20),a) from c;
注意:这个语句执行的前提是二进制字段不能太大,否则由于Sql语句支持长度的限制可能会出错。这个通常用于对于用户密码记小图片的读写。
2. 哪位前辈做过从SQLServer数据库读取varbinary的数据
插入
insert into tableName(item) values(convert(varbinary(200),'11111'))
查询
select convert(varchar(200),item) as test from tableName
item是字段名 用string代替
3. 关于SQL的varbinary
你可以把这个数据库在SQL企业管理器上面恢复,然后再打开表来看就行了。
4. 如何读取修改SQLSERVER2000的 varbinary(8000) 字段数据
读取
select varbinary from 表名
修改
update 表名 set varbinary='新的数据'
5. sql中varbinary 是什么数据类型
varbinary 类型和char与varchar类型是相似的,只是他们存储的是二进制数据,也就是说他们是包含字节流而不是字符流,他们有二进制字符的集合和顺序,他们的对比,排序是基于字节的数值进行的
binary与varbinary的最大长度和char与varchar是一样的,只不过他们是定义字节长度,而char和varchar对应的是字符长度。Varbinary是一个可以改变长度的二进制数据。
Varbinary[(n)] 是 n 位变长度的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4个字节,不是n 个字节。
varbinary在插入不会去填补0x00字节,查询的时候也不会丢弃任何字节,在比较的时候,所有的字节都是有效的,并且0x00<space (space对应的是0x20)。
(5)sqlvarbinary读取扩展阅读:
varbinary( n | max):可变长度,n 的取值范围为 1 至 8,000,max 是指最大存储空间是 2^31-1 个字节,即最大4GB;
在将数据转换为二进制数据时,SQL Server会对生成的二进制数据进行填充或截断,详细的规则是:
1、填充(或扩展)的二进制数据是16进制的0x00的整数倍,这就是说,填充的字节中每一个bit都是0;
2、将字符类型转换成二进制数据时,在数据的右侧填充或截断数据,填充数值是0x00;
3、将其他类型数据转换成二进制数据时,在数据的左侧填充或截断数据,填充数值是0x00;在截断数据时,保留低位的数据,将高位数值截断。
6. 如何读取数据库中的varbinary类型字段
cast(字段 as 你要的类型),例如:
cast(col as varchar(max))
7. 现有一个sql数据库表如何读取二进制内容
二进制数据由十六进制数表示,可以使用binary、varbinary和image数据类型存储。
binary固定长度(最多为8K)的二进制数据类型。
binary[ ( n) ] 固定长度的 n个字节二进制数据。N必须从 1 到 8,000。存储空间大小为 n+4 字节。
varbinary可变长度(最多为8K)的二进制数据类型。
varbinary[ ( n) ]n个
字节变长二进制数据。n必须从 1 到 8,000。存储空间大小为实际输入数据长度 +4个字节,而不是
n个字节。输入的数据长度可能为 0 字节。在 SQL-92 中varbinary的同义词为binary
varying。image用来存储长度超过 8 KB 的可变长度的二进制数据。
除非数据长度超过 8KB,否则一般宜用 varbinary 类型来存储二进制数据。一般用来存放
Microsoft Word 文档、Microsoft Excel 电子表格、包含位图的图像、图形交换格式 (GIF) 文件和联合图像专家组 (JPEG)
文件。在 Image 数据类型中存储的数据是以位字符串存储的,不是由 SQL Server
解释的,必须由应用程序来解释。例如,应用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把数据存储在 Image 数据类型中。参考下列C# 代码:
privatevoidPage_Load(objectsender,System.EventArgse)
{
//gettheimageidfromtheurl
stringImageId=Request.QueryString["img"];
//buildourquerystatement
stringsqlText="SELECTimg_data,img_contenttypeFROMImageWHEREimg_pk="+ImageId;
SqlConnectionconnection=newSqlConnection(ConfigurationSettings.AppSettings["DSN"].ToString());
SqlCommandcommand=newSqlCommand(sqlText,connection);
//
connection.Open();
SqlDataReaderdr=command.ExecuteReader();
if(dr.Read())//yupwefoundourimage
{
Response.ContentType=dr["img_contenttype"].ToString();
Response.BinaryWrite((byte[])dr["img_data"]);
}
connection.Close();
}
}
8. PHP怎么读取SQL的varbinary类型
在工控应用上,返回的数据经常会以二进制的形成存储,而这些二进制数据又是以每4个bit表示一个十六进制的数据内容。
解析的时候,往往是一个字节(Byte)占用8个位(bit),高位4bit 表示一个十六进制数据,低位4bit 表示一个十六进制数据。
问题描述:在SQL Server 数据库中,如何实现二进制数据与字符串数据之间的直接转换?
一定会有人立马反问我:为什么不在程序中使用 C# 或者 JAVA 或者 C++ 来处理这个业务呢?
我的回答是:这个我知道,也已经实现了。但在一些特殊的应用环境和业务需求面前(如:对数据的统计、对数据的分析),我必须这么做!
SQL Server 数据库中,实现 varbinary 类型转换成 varchar 类型
这个已经有人实现了,并且处理得相当巧妙。实现的思路是:
每次取得 varbinary 中一个字节的数据,然后除以16 获得高位的4bit数据,再模16获得低位的4bit数据;
分别从固定字符串中以下标的形式匹配对应的字符,最后累加起来即可。
代码如下:
复制代码
--==============================================
-- FUNCTION varbin2hexstr
-- 将 varbinary 类型的数据转换为 varchar 类型
--==============================================
IF OBJECT_ID ('dbo.varbin2hexstr') IS NOT NULL
DROP FUNCTION dbo.varbin2hexstr
GO
CREATE function varbin2hexstr(
@bin varbinary(8000)
)returns varchar(8000)
as
begin
declare @re varchar(8000),@i int
select @re='',@i=datalength(@bin)
while @i>0
select @re=substring('0123456789ABCDEF',substring(@bin,@i,1)/16+1,1)
+substring('0123456789ABCDEF',substring(@bin,@i,1)%16+1,1)
+@re
,@i=@i-1
-- return('0x'+@re)
return @re
end
GO
复制代码
测试示例:
select dbo.varbin2hexstr(0x1432fabcdef1234567890)
来源:SqlServer中varbinary转换成字符串
9. 如何读取SQL server数据库中varbinary字段内容
如果把照片直接保存在SQL Server数据库中,微软推荐用varbinary(MAX)字段。下面的代码演示了用C#操作varbinary(MAX)字段的基本方法。
1、新增记录
private void btnBrowse_Click(object sender, EventArgs e)//浏览照片
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "*.jpg(jpg文件)|*.jpg|*.gif|*.gif";
dlg.FilterIndex = 1;
if (dlg.ShowDialog()==DialogResult.OK)
{
textBox3.Text = dlg.FileName;
pictureBox1.Image = Image.FromFile(dlg.FileName);
}
}
//新增记录
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["db"].ConnectionString))
{
String sql = "insert into emp(name,age,photo) values(@name,@age,@photo)";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@name", textBox1.Text);
cmd.Parameters.AddWithValue("@age", Convert.ToInt32(textBox2.Text));
//byte[] b;
//using(FileStream fs=new FileStream(textBox3.Text,FileMode.Open,FileAccess.Read))
//{
// b = new byte[fs.Length];
// fs.Read(b, 0, (int)fs.Length);
//}
byte[] b;
if (textBox3.Text != "")
{
b = File.ReadAllBytes(textBox3.Text);
cmd.Parameters.AddWithValue("@photo", b);
}
else
{
cmd.Parameters.AddWithValue("@photo", System.Data.SqlTypes.SqlBinary.Null);
}
conn.Open();
try
{
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
2、显示记录信息并提供修改功能
private void FormDetail_Load(object sender, EventArgs e)//显示记录详细信息
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["db"].ConnectionString))
{
String sql = "select * from emp where id=@id";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@id", id);
conn.Open();
using (SqlDataReader dr = cmd.ExecuteReader())
{
if(dr.Read())
{
textBox1.Text = dr[1].ToString();
textBox2.Text = dr[2].ToString();
if (!dr.IsDBNull(3))//防止照片字段为空
{
System.Data.SqlTypes.SqlBytes bytes = dr.GetSqlBytes(3);
pictureBox1.Image=Image.FromStream(bytes.Stream);//显示照片
}
}
}
}
}
private void btnSave_Click(object sender, EventArgs e)//更新记录
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["db"].ConnectionString))
{
byte[] b;
if (textBox3.Text != "")//需要更新照片
{
String sql = "update emp set name=@name,age=@age,photo=@photo where id=@id";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@name", textBox1.Text);
cmd.Parameters.AddWithValue("@age", Convert.ToInt32(textBox2.Text));
cmd.Parameters.AddWithValue("@id", id);
b = File.ReadAllBytes(textBox3.Text);
cmd.Parameters.AddWithValue("@photo", b);
conn.Open();
try
{
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
else//不需要更新照片
{
String sql = "update emp set name=@name,age=@age where id=@id";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@name", textBox1.Text);
cmd.Parameters.AddWithValue("@age", Convert.ToInt32(textBox2.Text));
cmd.Parameters.AddWithValue("@id", id);
conn.Open();
try
{
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}