【问题标题】:SQL Server Express and C# : Database ChartingSQL Server Express 和 C#:数据库图表
【发布时间】:2014-04-30 12:17:12
【问题描述】:

我正在尝试将我的 SQL Server Express 数据库链接到 c# 应用程序中的图表。我正在尝试提取一些员工的年龄以将它们显示在条形字符中。这是我的代码

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

我做错了什么?

【问题讨论】:

  • 好的,我已经修改了代码并且它可以工作,但它只显示数据库中的第一个人,我如何显示所有员工?
  • 解决了使用,一个for循环

标签: c# sql database charts


【解决方案1】:

错误 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 作为第一个参数。

【讨论】:

    【解决方案2】:

    IDataReader's.Get* 方法只获取要访问的列的索引,而不是列名。

    所以不是

    myReader.GetString("FirstName")
    

    你需要类似的东西

    myReader["FirstName"].ToString()
    

    Convert.ToInt32(myReader.GetInt32("Age")))
    

    如果您在紧密循环中执行此操作,则可以缓存名称:索引映射。

    【讨论】:

      【解决方案3】:

      您应该使用 GetString(0) 或 GetString(1) 或 GetString(2)

      【讨论】:

        【解决方案4】:

        请试试这个代码。

        try{
            conDatabase.Open();
            myReader=cmdDatabase.ExecuteReader();
        
            chart1.DataSource = myReader;
        
            chart1.Series["Age"].XValueMember = "FirstName";
            chart1.Series["Age"].YValueMembers = "Age";
        
            chart1.DataBind(); 
        }
        

        【讨论】:

        • 我试过你的方法,但是收到错误信息,对象引用没有设置为对象的实例?
        • chart1 可能未初始化。
        猜你喜欢
        • 1970-01-01
        • 2011-05-06
        • 2018-02-07
        • 1970-01-01
        • 1970-01-01
        • 2010-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多