问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何通过SQL函数将7个字节的十六进制数据转换为十进制,找了一个函数转换四个字节的可以,7个就不行了

发布网友 发布时间:2022-04-30 15:55

我来回答

2个回答

热心网友 时间:2023-10-08 20:56

1、建所需数据库和表,语句如下:

--建立数据库
create database test

--使用该数据库
use test

--建立存放图片的表
create table piclist(
id int Identity primary key,
pic Image not null
)

2、制作上传图片的模块,代码如下:
前台html代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="UpPhoto.aspx.cs" Inherits="Test_UpPhoto" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">

<html xmlns="" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<input id="UpPhoto" name="UpPhoto" runat="server" type="file" />
<asp:Button id="btnAdd" runat="server" Text="上传" OnClick="btnAdd_Click"></asp:Button>
</div>
</form>
</body>
</html>

后台代码:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Data.SqlClient;

public partial class Test_UpPhoto : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}

protected void btnAdd_Click(object sender, EventArgs e)
{
//获得图象并把图象转换为byte[]
HttpPostedFile upPhoto = UpPhoto.PostedFile;
int upPhotoLength = upPhoto.ContentLength;
byte[] PhotoArray = new Byte[upPhotoLength];
Stream PhotoStream = upPhoto.InputStream;
PhotoStream.Read(PhotoArray, 0, upPhotoLength);

//连接数据库
string ConStr = "server=(local);user id=sa;pwd=sa;database=test";
SqlConnection conn = new SqlConnection(ConStr);

string strSql = "Insert into piclist(pic) values(@pic)";
SqlCommand cmd = new SqlCommand(strSql, conn);
cmd.Parameters.Add("@pic", SqlDbType.Image);
cmd.Parameters["@pic"].Value = PhotoArray;

conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
Response.Write("图片上传成功");
}
}

3、制作显示图片的模块(单独显示图片,即没用到datalist):
后台代码:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.IO;

public partial class Test_ShowPhoto : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
//连接数据库
string ConnStr = "server=(local);user id=sa;pwd=sa;database=test";
string strSql = "select * from piclist";
SqlConnection conn = new SqlConnection(ConnStr);
conn.Open();

SqlCommand cmd=new SqlCommand(strSql,conn);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
Response.ContentType = "application/octet-stream";
Response.BinaryWrite((Byte[])reader["pic"]);
Response.Write("successful");
}
reader.Close();
conn.Close();
Response.End();
}
}
}

补充步骤3,用datalist显示图片方法:
建立两个asp.net 页面,名称为piclist.aspx和StreamImg.aspx。
piclist.aspx前台代码为:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="piclist.aspx.cs" Inherits="Test_Test" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">

<html xmlns="" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DataList ID="dlContent" runat="server" Width="554px">
<ItemTemplate>
<table cellpadding="0" cellspacing="0">
<tr>
<td style="width: 554px; text-align: left; background-image: url(Image/标头.jpg); height: 26px;">
    <img id='img1' src='StreamImg.aspx?id= <%# DataBinder.Eval(Container.DataItem,"id") %>'>
</a>
</a>
</td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
</div>
</form>
</body>
</html>

piclist.aspx后台代码为:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.IO;

public partial class Test_Test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//连接数据库
string ConnStr = "server=(local);user id=sa;pwd=sa;database=test";
SqlConnection sqlcon = new SqlConnection(ConnStr);
sqlcon.Open();
string sqlstr = "select id from piclist";
SqlDataAdapter MyAdapter = new SqlDataAdapter(sqlstr, sqlcon);
DataSet ds = new DataSet();
MyAdapter.Fill(ds, "tb_pic");
this.dlContent.DataSource = ds;
this.dlContent.DataBind();
sqlcon.Close();
}
}
}

StreamImg.aspx无前台代码,后台代码为:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;
using System.IO;

public partial class StreamImg : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//string type = Request.QueryString["pt"];
int id = Convert.ToInt32(Request.QueryString["id"]);
ShowPic(id);
}
private void ShowPic(int id)
{
//连接数据库
string ConnStr = "server=(local);user id=sa;pwd=sa;database=test";
string strSql = "select * from piclist where id='"+ id +"'";
SqlConnection conn = new SqlConnection(ConnStr);
conn.Open();

SqlCommand cmd = new SqlCommand(strSql, conn);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
Response.ContentType = "application/octet-stream";
Response.BinaryWrite((Byte[])reader["pic"]);
Response.Write("successful");
}
reader.Close();
conn.Close();
Response.End();
}
}

热心网友 时间:2023-10-08 20:56

这个值转换为16进制是"100000000",9个字节.你可以自己写一个函数.以下可供参考:
create function InttoHex(@numbigint,@hexLengthint)
returns varchar(100)
as
begin
declare@revarchar(100)
declare@bnbigint,@tempLenint
set@bn=@num
set@re=''
----------------------------------------
while (@num>0)
begin
set@re=substring('0123456789ABCDEF',@num%16+1,1)+@re
set@num=@num/16
end
----------------------------------------
set@tempLen=@hexLength-len(@re)
while(@tempLen> 0)
begin
set@re='0'+@re
set@tempLen=@tempLen- 1
end
return(@re)
end
GO

create function HextoInt (@hexSvarchar(16))
returns bigint
AS
begin
declare@iint,@resultbigint,@lenint
declare@powerbigint
set@power= 16
select@i= 0,@result= 0,@hexS=RTRIM(LTRIM(UPPER(@hexS)))
set@len=len(@hexS)

if (@len= 16)
begin
if (ascii(substring(@hexS, 1, 1))> 55)
begin
-- RaisError('超出数据运算范围', 1, 16)
return@result
end
end
-------------------------------------------------------
while (@i<@len)
begin
if ((substring(@hexS,@len-@i, 1)notbetween'0'and'9')
AND
(substring(@hexS,@len-@i, 1)notbetween'A'and'F'))
begin
set@result= 0
break;
end
----------------------------------------
set@result=@result+ (charindex(substring(@hexS,@len-@i, 1),'0123456789ABCDEF')- 1)*cast(power(@power,@i)asbigint)
set@i=@i+ 1
end
----------------------------------------------
return@result
end
GO
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
刚买了个 iphone3G 一更新麻烦了出现了错误1014 而且手机什么都没有了... Dell vostro 1014新机怎样分区? macosv1014以上版本怎么更新 江苏智能锁种类 陕西有那些换锁哪家省钱 有必要买大牌的智能门锁吗? 陕西口碑好指纹锁哪家省钱 如何设置excel每页打印表头 excel打印多页表格时怎么设置每页都有表头 我的笔记本是DV4现在进不去系统, winpe识别不了硬盘 bios找不到... 百度校庆手抄报 那个平台借钱利息低 golang的xorm如何将[]map[string][]byte 格式的数据序列化成json输出 电视机画面不断的跳动,要怎么修? 校庆手抄报内容 校庆手抄报怎么做? 苏泊尔高压锅上面总是冒气是怎么回事 我新买的高压锅怎么是一股一股的呲呲冒气啊 高压锅为什么冒气? 高压锅冒出汽是怎么回事呀 细节稍改,全新比亚迪宋MAX纯电版首曝,亮点集中在安全配置上 高压锅突然冒气汤出来了是什么原因 电压力锅煮饭看着像冒浓烟怎么回事? 比亚迪宋max后档玻璃尺寸多少?我想做一个广告贴 【车主点评:比亚迪宋max 二胎家庭的刚需之选】 高压锅突然大量冒出白烟是怎么回事 比亚迪宋MAX这款车,值得购买吗? 【车主点评:宋MAX 无与伦比的动力和性价比】 第一次用高压锅为啥会冒烟 比亚迪宋MAX价格坚挺,一分钱都没得降价,你觉得还要观望吗? 百年校庆马上就到了,手抄报里写什么啊? 学校要我们做校庆的手抄报,我需要设计图或是参考,要求如下: 求一份关于校庆的手抄报 ps素材在哪里找比较好? 校庆手抄报抄什么作文? 50年校庆应该出什么的手抄报 筋沃巴脑一锅出怎么做? 筋头巴脑一锅香怎么做 筋头巴脑锅的做法步骤图,筋头巴脑锅怎么做 正宗筋头巴脑做法图片 为什么一寸照片在腾讯会议里头像框里放不下呢?为什么一寸照片在腾讯会议里头像框里放不下?_百度问一问 为什么汽车的空调出风口选用ABS材料 abs铝合金风口和散流器的区别 学前儿童游戏指导(第六章) 安卓手机如何备份系统预装软件? 如何看湖北福e贷额度 福e贷可以借几次 java参数是干什么用的。在什么时候会用到。求大神 蚂蚁借呗不是说审核只要6分钟吗为什么过了一小时还没有结果? 我在网贷蚂蚁借呗app上申请了借款一直在审核中到时间了用还款吗?