Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Datareader未读取图像值_C#_Asp.net_Sql - Fatal编程技术网

C# Datareader未读取图像值

C# Datareader未读取图像值,c#,asp.net,sql,C#,Asp.net,Sql,我在页面加载时使用datareader读取和存储变量中的数据库值,我的表包括nvarchar和image类型列。在页面加载时,数据库中的“我的5个图像”值并没有被读取器读取,但其他值是完全读取的 Byte[] img1 = null; Byte[] img2 = null; Byte[] img3 = null; Byte[] img4 = null; Byte[] img5 = null; SqlConnection con = new SqlConnection("Data Source=R

我在页面加载时使用datareader读取和存储变量中的数据库值,我的表包括nvarchar和image类型列。在页面加载时,数据库中的“我的5个图像”值并没有被读取器读取,但其他值是完全读取的

Byte[] img1 = null;
Byte[] img2 = null;
Byte[] img3 = null;
Byte[] img4 = null;
Byte[] img5 = null;
SqlConnection con = new SqlConnection("Data Source=RAJ-PC\\SQLEXPRESS;Initial Catalog=Finder;Integrated Security=True");
protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        loadad();
    }
}

protected void loadad()
{
    SqlCommand cmd = new SqlCommand("sps_addetails", con);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@ad_id", ad_id);
    cmd.Parameters.AddWithValue("@useremail", ses);
    con.Open();
    SqlDataReader reader = cmd.ExecuteReader();
    while (reader.Read())
    {
        rd_iam.SelectedValue = reader["iam"].ToString();
        dd_category.SelectedValue = reader["category"].ToString();
        c = Convert.ToInt16(reader["category"].ToString());
        dd_subcategory.SelectedValue = reader["subcategory"].ToString();
        txt_title.Text = reader["title"].ToString();
        txt_description.Text = reader["description"].ToString();
        txt_pername.Text = reader["contactname"].ToString();
        txt_mobile1.Text = reader["mobile1"].ToString();
        txt_mobile2.Text = reader["mobile2"].ToString();
        txt_landline1.Text = reader["landline1"].ToString();
        txt_landline2.Text = reader["landline2"].ToString();
        txt_email1.Text = reader["email1"].ToString();
        txt_email2.Text = reader["email2"].ToString();
        txt_website.Text = reader["website"].ToString();
        dd_country.Text = reader["country"].ToString();
        d = Convert.ToInt16(reader["country"].ToString());
        dd_state.Text = reader["state"].ToString();
        txt_pincode.Text = reader["pincode"].ToString();
        txt_address.Text = reader["address"].ToString();
        txt_lat.Text = reader["latitude"].ToString();
        txt_lon.Text = reader["longitude"].ToString();

        img1 = (byte[])reader["image1"];
        img2 = (byte[])reader["image2"];
        img3 = (byte[])reader["image3"];
        img4 = (byte[])reader["image4"];
        img5 = (byte[])reader["image5"];

    }
    con.Close();

}
存储过程sps_addtails是

ALTER PROCEDURE [dbo].[sps_addetails] 
@ad_id int,
@useremail nvarchar(100)
AS
BEGIN
select * from dbo.tbl_adregister where useremail=@useremail and ad_id=@ad_id
END
aspx


尝试先确定图像大小,然后实例化变量,然后使用
GetBytes()
方法:

int index = reader.GetOrdinal("image1");
Int64 size = 0;

try { size = reader.GetBytes(index , 0, null, 0, int.MaxValue); }
catch { size = reader.GetBytes(index, 0, img1, 0, 1); }

img1 = new Byte[size];

reader.GetBytes(index, 0, img1, 0, img1.Length);

... rinse and repeat for images 2 through 5 ...

让我们知道这是否适合您。

读取图像值与其他值不同

<img runat="server" id="image1" alt="" src="" height="100" width="100" />

protected void LoadImage1()
{
    SqlCommand cmd = new SqlCommand("sps_getimage", con);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@flag", 1);
    cmd.Parameters.AddWithValue("@ad_id", ad_id);
    con.Open();
    SqlDataReader reader = cmd.ExecuteReader(System.Data.CommandBehavior.SequentialAccess);
    if (reader.HasRows)
    {
        reader.Read();
        MemoryStream memory = new MemoryStream();
        long startIndex = 0;
        const int ChunkSize = 256;
        while (true)
        {
            byte[] buffer = new byte[ChunkSize];
            long retrievedBytes = reader.GetBytes(0, startIndex, buffer, 0, ChunkSize);
            memory.Write(buffer, 0, (int)retrievedBytes);
            startIndex += retrievedBytes;
            if (retrievedBytes != ChunkSize)
                break;
        }

        byte[] data = memory.ToArray();
        img1 = data;
        memory.Dispose();
        image1.Src = "data:image/png;base64," + Convert.ToBase64String(data);
    }
    con.Close();
}

受保护的void LoadImage1()
{
SqlCommand cmd=新的SqlCommand(“sps_getimage”,con);
cmd.CommandType=CommandType.storedProcess;
cmd.Parameters.AddWithValue(“@flag”,1);
cmd.Parameters.AddWithValue(“@ad_id”,ad_id);
con.Open();
SqlDataReader=cmd.ExecuteReader(System.Data.CommandBehavior.SequentialAccess);
if(reader.HasRows)
{
reader.Read();
MemoryStream memory=新的MemoryStream();
长startIndex=0;
常量int ChunkSize=256;
while(true)
{
字节[]缓冲区=新字节[ChunkSize];
long retrievedBytes=reader.GetBytes(0,startIndex,buffer,0,ChunkSize);
内存写入(缓冲区,0,(int)retrievedBytes);
startIndex+=检索字节;
if(retrievedBytes!=ChunkSize)
打破
}
字节[]数据=内存。ToArray();
img1=数据;
Dispose()内存;
image1.Src=“data:image/png;base64,”+Convert.ToBase64String(数据);
}
con.Close();
}

能否也显示存储过程
sps\u addetails
是的,当然可以……我编辑了这个问题。一旦检索到“img1”,您将如何处理它?在页面上显示它?如果是这样,您可以粘贴该代码吗?我有一个更新按钮,我将img1发送回数据库,因为用户未通过文件上载选择任何文件,如果用户选择文件上载,则新值将转到数据库。如果用户未上载新图像,是否需要将
img1
发送回数据库?它应该已经被存储,所以不需要重新发送。是的,你是对的,但我有存储过程来更新表,我必须传递一些值…如果用户选择文件上载,则新值存储在数据库中,但若用户不使用文件上传,那个么我必须传递空值,然后用这个空值替换我的表图像值……这就是我的问题
int index = reader.GetOrdinal("image1");
Int64 size = 0;

try { size = reader.GetBytes(index , 0, null, 0, int.MaxValue); }
catch { size = reader.GetBytes(index, 0, img1, 0, 1); }

img1 = new Byte[size];

reader.GetBytes(index, 0, img1, 0, img1.Length);

... rinse and repeat for images 2 through 5 ...
<img runat="server" id="image1" alt="" src="" height="100" width="100" />

protected void LoadImage1()
{
    SqlCommand cmd = new SqlCommand("sps_getimage", con);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@flag", 1);
    cmd.Parameters.AddWithValue("@ad_id", ad_id);
    con.Open();
    SqlDataReader reader = cmd.ExecuteReader(System.Data.CommandBehavior.SequentialAccess);
    if (reader.HasRows)
    {
        reader.Read();
        MemoryStream memory = new MemoryStream();
        long startIndex = 0;
        const int ChunkSize = 256;
        while (true)
        {
            byte[] buffer = new byte[ChunkSize];
            long retrievedBytes = reader.GetBytes(0, startIndex, buffer, 0, ChunkSize);
            memory.Write(buffer, 0, (int)retrievedBytes);
            startIndex += retrievedBytes;
            if (retrievedBytes != ChunkSize)
                break;
        }

        byte[] data = memory.ToArray();
        img1 = data;
        memory.Dispose();
        image1.Src = "data:image/png;base64," + Convert.ToBase64String(data);
    }
    con.Close();
}