请问各位大侠,C#代码中的Throw 为什么报错 ,注释提示说没有返回值,该怎么修改呢:1、业务实体:
public class Article
{
private int _articleId; public int ArticleId
{
get { return _articleId; }
set { _articleId = value; }
}
…
}
2、调用通用的SQLHelper ,数据访问如下:
public static Article GetArticleByArticleId(int id)
{
string sql = "select * from article where articleId=@articleId";
try
{
using (SqlDataReader reader = SqlHelper.GetReader(sql, new SqlParameter("@articleId", id)))
{
if (reader.Read())
{ return FillRecord(reader); }
else
{ return null; }
}
}
catch (Exception e)
{
Console.WriteLine(e.Message); throw e;
}
}3、业务逻辑
public static class ArticleManager
{
public static Article GetArticlesByArticleId(int id)
{
return ArticleService.GetArticleByArticleId(id);
} }[b]程序运行显示 数据访问错误显示:
throw e处; 对象不能从 DBNull 转换为其他类型。请各位指示
public class Article
{
private int _articleId; public int ArticleId
{
get { return _articleId; }
set { _articleId = value; }
}
…
}
2、调用通用的SQLHelper ,数据访问如下:
public static Article GetArticleByArticleId(int id)
{
string sql = "select * from article where articleId=@articleId";
try
{
using (SqlDataReader reader = SqlHelper.GetReader(sql, new SqlParameter("@articleId", id)))
{
if (reader.Read())
{ return FillRecord(reader); }
else
{ return null; }
}
}
catch (Exception e)
{
Console.WriteLine(e.Message); throw e;
}
}3、业务逻辑
public static class ArticleManager
{
public static Article GetArticlesByArticleId(int id)
{
return ArticleService.GetArticleByArticleId(id);
} }[b]程序运行显示 数据访问错误显示:
throw e处; 对象不能从 DBNull 转换为其他类型。请各位指示
解决方案 »
- C# 网络编程问题
- 从SAP获得的DataTabel如果一次性把数据导入SQL server DB 送分!!!!!!!!
- winform的一个小问题
- 一个关于winform NetworkStream发送和接收文件的问题
- 什么是WEB SERVICE?
- ajax未定义的问题
- .net framework2.0环境下为何无法运行取得WebException的属性
- 制作简单的小游戏,如接金币(类似大富翁中的小游戏)。
- 数字的四舍五入问题
- C#中Console.WriteLine("num1={0,-10}num2={1}",num1,num2)表示什么意思
- C# winform 做留言板
- 有个TCP中的字节流的问题,求大神相助.
using(SqlDataReader reader = SqlHelper.GetReader(sql, new SqlParameter("@articleId", id)))
{
if (reader.Read() !=null)
{
return FillRecord(reader);
}
else
{
return null; }
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
throw e;
}
}
例如if(reader[2]!=System.DBNull.Value)
{
string s=reader[2].ToString();
}
/// 实体对象填充业务对象公共方法
/// </summary>
/// <param name="reader"></param>
/// <returns></returns>
private static Article FillRecord(SqlDataReader reader)
{
Article a = new Article(); a.ArticleId = Convert.ToInt32(reader["articleId"]);
a.ChannelId = Convert.ToInt32(reader["channelId"]);
a.Title = Convert.ToString(reader["title"]);
a.ArticleDetails = Convert.ToString(reader["articleDetails"]); a.ReadTotal = Convert.ToInt32(reader["readTotal"]);
a.CommentTotal = Convert.ToInt32(reader["commentTotal"]);
a.ShareTotal = Convert.ToInt32(reader["shareTotal"]); a.DateCreated = Convert.ToDateTime(reader["dateCreated"]);
a.CreatedBy = Convert.ToInt32(reader["createdBy"]); a.IsPost = Convert.ToBoolean(reader["isPost"]);
a.PostDate = Convert.ToDateTime(reader["postDate"]);
a.PostBy = Convert.ToInt32(reader["postBy"]); return a;
}
错误依然!
if(reader["articleId"]!=null)
{
a.ArticleId = Convert.ToInt32(reader["articleId"]);
}所有全加if 肯定有空的
if(reader["articleId"]!=DBNull。value)
{
a.ArticleId = Convert.ToInt32(reader["articleId"]);
}都加上这个判断
错了 是这个if(reader["articleId"]!=DBNull.value)
{
a.ArticleId = Convert.ToInt32(reader["articleId"]);
}都加上这个判断
catch (Exception e)
{
Console.WriteLine(e.Message);
throw e;
}
这里throw e 要改成throw
不然的话调试的时候会人为错误是从 throw e;这行代码中产生的。
2、
你说提示无将DBNull 转换成其他类型,说明你查询的数据中有字段是为null的。这个时候要人为的进行转换。
因为数据库中存储null值和程序中存储null值是有区别的
if(reader["articleId"]!=DBNull.value)
{
a.ArticleId = Convert.ToInt32(reader["articleId"]);
}赋值之前判断下本身库中的值是不是“Null”
数据库中的“null”和程序中的不同
判断数据库中的是是不是“null”用DBNull.Value判断