DataAccess DA = new DataAccess();
SqlConnection Conn = DA.getConn(); //连接数据库
//把“日记”界面上的相应控件与数据库绑定 ArrayList arr=new ArrayList();
string sql="select 标题,dy_pkid from ta_diary";
SqlCommand myCommand = new SqlCommand(sql,Conn);
try
{
SqlDataReader myReader = myCommand.ExecuteReader();
while (myReader.Read())
arr.Add(myReader.GetString(0));
return arr;
}
finally
{
Conn.Close(); //释放资源
}
为什么如果我要返回的是myReader.GetString(1)系统却提示说“类型转换无效”,其中dy_pkid类型为int!我改成“ arr.Add(myReader.Getint16(1));
”也是不行!这是为什么?
SqlConnection Conn = DA.getConn(); //连接数据库
//把“日记”界面上的相应控件与数据库绑定 ArrayList arr=new ArrayList();
string sql="select 标题,dy_pkid from ta_diary";
SqlCommand myCommand = new SqlCommand(sql,Conn);
try
{
SqlDataReader myReader = myCommand.ExecuteReader();
while (myReader.Read())
arr.Add(myReader.GetString(0));
return arr;
}
finally
{
Conn.Close(); //释放资源
}
为什么如果我要返回的是myReader.GetString(1)系统却提示说“类型转换无效”,其中dy_pkid类型为int!我改成“ arr.Add(myReader.Getint16(1));
”也是不行!这是为什么?
解决方案 »
- 求指点
- 注册与更新
- 请问下怎样点击鼠标左键弹出快捷菜单,代码怎么写啊?
- 为什么Assembly.Load(Path).CreateInstance(ClassName);的值为null?
- UltraWinGrid中加入CheckBox后的问题
- c#如何能够获取远程的计算机信息?
- 关于内存dc的问题
- 可否利用AFORGE或者直接用C#通过摄像头识别地面黑线呢?
- 如何给dataGrid控件赋值?
- Encoding.GetEncoding()在哪個namespace下?
- 请教:webservice里InvokeWebservice的一个问题
- 大家常用 tostring() 这个方法,但是 你知道 它的代码在那里吗 高手 指导 一下
如果有空值的话
arr.Add(myReader.IsDBNull(1)?0:myReader.GetInt32(1));
可是改成“arr.Add(myReader.GetInt32(1));”还是老问题“类型转换无效”但是如果myReader检索的是字符类型就可以,而int类型就报错!
另外给给出的不是全部代码,所以没法确定原因(至少要给全这个函数的全部代码,因为现在看出不这个函数中try块失败后,返回的值是什么,而且你已经放弃了错误捕获,你从哪得来的"类型转换无效"这条信息)
类文件:
using System;
using System.Data.SqlClient;
using System.Collections;
namespace PersonalOS
{
/// <summary>
/// Dy_Listbxshow 的摘要说明。
/// </summary>
public class Dy_Listbxshow
{
public Dy_Listbxshow()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public ArrayList dy_show()
{
DataAccess DA = new DataAccess();
SqlConnection Conn = DA.getConn(); //连接数据库
//把“日记”界面上的相应控件与数据库绑定 ArrayList arr=new ArrayList();
string sql="select 标题 from ta_diary";
SqlCommand myCommand = new SqlCommand(sql,Conn);
try
{
SqlDataReader myReader = myCommand.ExecuteReader();
while (myReader.Read())
arr.Add(myReader.Getstring(0));
return arr;
}
finally
{
Conn.Close(); //释放资源
}
} }
}
这串代码我运行了,没有错。也能够把“标题”中的数据用ArrayList类全部return出来(但我要让这类反会的是dy_pkid列中的数据(int),而不是“标题”中的数据(nvarchar))。但是如果返回的列的类型不是string类型,运行的时候会出现刚刚说的对话框,且
“arr.Add(myReader.Getstring(0));”出现青色和“类型转换无效”的对话框
窗体代码为:
private void diary_Load(object sender, System.EventArgs e)
{
//调用(返回ArrayList类型)类实现在dy_listlbx框中添加相应数据;
Dy_Listbxshow lshow= new Dy_Listbxshow();
ArrayList a=lshow.dy_show();
for(int i=0;i<a.Count;i++)
{
dy_listlbx.Items.Add(a[a.Count-1-i]);
}
}
也就是说在窗口“diary”载入的时候马上出现错误对话框!
arr.Add(myReader.Getstring(0));这句可以证明你是敲上去的
应该是“arr.Add(myReader.GetString(0));”
奇怪的是,如果不在Add方法里面使用myReader.GetInt16(0)就不会有错误!