當前位置:首頁 » 編程語言 » sqlvarbinary讀取
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sqlvarbinary讀取

發布時間: 2022-07-07 00:44:04

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資料庫表如何讀取二進制內容

  1. 二進制數據由十六進制數表示,可以使用binary、varbinary和image數據類型存儲。

  2. binary固定長度(最多為8K)的二進制數據類型。

    binary[ ( n) ] 固定長度的 n個位元組二進制數據。N必須從 1 到 8,000。存儲空間大小為 n+4 位元組。

  3. varbinary可變長度(最多為8K)的二進制數據類型。

    varbinary[ ( n) ]n個

  4. 位元組變長二進制數據。n必須從 1 到 8,000。存儲空間大小為實際輸入數據長度 +4個位元組,而不是
    n個位元組。輸入的數據長度可能為 0 位元組。在 SQL-92 中varbinary的同義詞為binary
    varying。

  5. image用來存儲長度超過 8 KB 的可變長度的二進制數據。

  6. 除非數據長度超過 8KB,否則一般宜用 varbinary 類型來存儲二進制數據。一般用來存放
    Microsoft Word 文檔、Microsoft Excel 電子表格、包含點陣圖的圖像、圖形交換格式 (GIF) 文件和聯合圖像專家組 (JPEG)
    文件。

  7. 在 Image 數據類型中存儲的數據是以位字元串存儲的,不是由 SQL Server
    解釋的,必須由應用程序來解釋。例如,應用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把數據存儲在 Image 數據類型中。

  8. 參考下列C# 代碼:

  9. 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);
}
}
}
}