这是对我之前提到的question的回应,因为我无法在8小时之前将其发布在那里,我已经创建了一个新问题,我正面临着这个问题,
以下是代码:
if (context.Request.QueryString["id"] != null)
{
int id = int.Parse(context.Request.QueryString["id"].ToString());
string connectionString = "Data Source=tarun-PC\\SQLEXPRESS;Initial Catalog=mydb;Integrated Security=True";
string commandString = "Select fsImage from WHATSNSTORE_FEATURED_STORES where imageId=" + id;
SqlConnection oConnection = new SqlConnection(connectionString);
SqlCommand oCommand = new SqlCommand(commandString, oConnection);
if (oConnection.State != ConnectionState.Open)
{
oConnection.Open();
}
SqlDataReader myDataReader = oCommand.ExecuteReader();
//myDataReader.Read();
try
{
if (myDataReader.Read())
{
context.Response.ContentType = "image/jpg";
context.Response.BinaryWrite((byte[])myDataReader["fsImage"]);
}
}
catch (Exception ex)
{
context.Response.Write(ex.Message);
}
我的表
create table WHATSNSTORE_FEATURED_STORES
(
imageId int primary key identity,
fsImage image
)
现在唯一的问题是,在调试时它会跳过if(myDataReader.Read())
部分,这表示没有数据存在!
如何解决问题?
答案 0 :(得分:1)
如果您的阅读器为空,则表示您的查询未返回结果。
查看您的代码我会说数据库中缺少图像。您应该假设可以并且将会发生这种情况,并将空白图像流式传输到浏览器或返回HTTP 404错误。
<强> [更新] 强>
您检查生成的SQL字符串了吗?将 id 添加到SQL字符串时,会将其强制转换为字符串。如果id超过1000,您可能会得到整数的局部表示(即1.000而不是1000)。这可以解释为什么SSMS中的查询确实返回结果而页面没有。
原始回答:
我注意到你正在使用int.Parse
;您可能想要使用int.TryParse
。如果该值不是有效false
,则只会返回int
。
此外,您正在通过字符串连接构建SQL。这被认为是一种不好的做法。你应该使用参数。
另一个最佳实践是将连接和阅读器包装在using
语句中。这将确保连接和读取器在不再需要时关闭,尤其是在异常的情况下。
最后,您可能需要考虑将连接字符串移动到web.config文件中。
答案 1 :(得分:0)
您应该使用oCommand.ExecuteScalar而不是reader,因为您只需要一个值。之后,您可以检查返回的值是否为空。
答案 2 :(得分:0)