我正在尝试将我的SQL Server Express数据库链接到c#应用程序中的图表。我试图提取一些员工的年龄,以显示它们在一个酒吧char。这是我的代码
string constring = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\Users\\Michael\\Downloads\\Employee\\Employee\\Employee\\EmployeeDetails.mdf;Integrated Security=True;User Instance=True;Initial Catalog=Employee";
SqlConnection conDatabase = new SqlConnection(constring);
SqlCommand cmdDatabase = new SqlCommand("Select * from Employee;", conDatabase);
SqlDataReader myReader;
try{
conDatabase.Open();
myReader=cmdDatabase.ExecuteReader();
while(myReader.Read())
{
this.chart1.Series["Age"].Points.AddXY(myReader.GetString("FirstName"), myReader.GetInt32("Age"));
}
}
当我编译程序时,我收到4条与此行相关的错误消息:
(myReader.GetString("FirstName"), myReader.GetInt32("Age"))
错误消息是:
'System.Data.Common.DbDataReader.GetString(int)'的最佳重载方法匹配有一些无效的参数
参数1:无法从'string'转换为'int' 'System.Data.Common.DbDataReader.GetInt32(int)'的最佳重载方法匹配有一些无效的参数
参数1:无法从'string'转换为'int'
SQL Server Express数据库对VARCHAR
使用FirstName
,INT
使用Age
我做错了什么?
答案 0 :(得分:2)
错误1最佳重载方法匹配 'System.Data.Common.DbDataReader.GetString(int)'有一些无效 参数
DbDataReader.GetString
method将参数视为int
,而不是string
。
获取指定列的值作为String的实例。
public abstract string GetString(
int ordinal
)
将此方法与FirstName
和Age
列的从零开始的列序号一起使用。
错误2参数1:无法从'string'转换为'int'
string
到int
没有隐含的对话。您实际收到此错误是因为myReader.GetString("FirstName")
方法返回string
,但您的AddXY()
方法可能除了int
作为第一个参数。
答案 1 :(得分:1)
IDataReader
's .Get*
方法只接受要访问的列的索引,而不是列名。
所以而不是
myReader.GetString("FirstName")
你需要像
这样的东西myReader["FirstName"].ToString()
和
Convert.ToInt32(myReader.GetInt32("Age")))
如果您在紧密循环中执行此操作,则可以缓存名称:index mappings。
答案 2 :(得分:0)
你应该使用GetString(0)或GetString(1)或GetString(2)
答案 3 :(得分:0)
请尝试此代码。
try{
conDatabase.Open();
myReader=cmdDatabase.ExecuteReader();
chart1.DataSource = myReader;
chart1.Series["Age"].XValueMember = "FirstName";
chart1.Series["Age"].YValueMembers = "Age";
chart1.DataBind();
}