SQL Server Express和C#:数据库图表

时间:2014-01-02 11:27:08

标签: c# sql database charts

我正在尝试将我的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使用FirstNameINT使用Age

我做错了什么?

4 个答案:

答案 0 :(得分:2)

  

错误1最佳重载方法匹配   'System.Data.Common.DbDataReader.GetString(int)'有一些无效   参数

DbDataReader.GetString method将参数视为int,而不是string

  

获取指定列的值作为String的实例。

public abstract string GetString(
    int ordinal
)

将此方法与FirstNameAge列的从零开始的列序号一起使用。

  

错误2参数1:无法从'string'转换为'int'

stringint没有隐含的对话。您实际收到此错误是因为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(); 
}