【问题标题】:C# Get results from SQL query in a text boxC# 在文本框中获取 SQL 查询的结果
【发布时间】:2018-02-13 22:55:08
【问题描述】:

我有以下代码(没有错误),它应该得到 SQL 查询的结果并将其放在 HolEmpName 文本框中,但它仍然是空白的。

public void holidayempname()    
{
    string query = "SELECT 'Employee Name' FROM dbo.Employees WHERE EmployeeID = @HolidayEmployeeID;";

    using (SqlConnection cn = new SqlConnection())
    using (SqlCommand cmd = new SqlCommand(query, cn))
    {
        cmd.Parameters.Add("@HolidayEmployeeID", SqlDbType.UniqueIdentifier).Value = holiday_EmployeeIDTextBox.Text;
        cn.Open();
        object result = cmd.ExecuteScalar();
        cn.Close();
        if (result != null)
        {
            int value = (int)result;
            HolEmpName.Text = value.ToString();
        }
    }
}

表结构:

员工:

EmployeeID
Employee Name

节假日:

HolidayID
Holiday EmployeeID

当前代码:

    public void holidayempname()

    {
        string query = "SELECT [Employee Name] FROM dbo.Employees WHERE EmployeeID = @HolidayEmployeeID;";

        using (SqlConnection cn = new SqlConnection())
        using (SqlCommand cmd = new SqlCommand(query, cn))
        {
            cmd.Parameters.Add("@HolidayEmployeeID", holiday_EmployeeIDComboBox.Text);
            //cmd.Parameters.Add("@HolidayEmployeeID", SqlDbType.UniqueIdentifier).Value = holiday_EmployeeIDComboBox.Text;
            cn.Open();
            object result = cmd.ExecuteReader();
            cn.Close();
            if (result != null)
            {
                int value = (int)result;
                HolEmpName.Text = value.ToString();
            }
        }
    }

【问题讨论】:

  • @HolidayEmployeeID;"; 是问题吗?
  • Debug.Writeline the holiday_EmployeeIDTextBox.Text 并查看它的输出。我也怀疑可能没有填充,使您的查询不返回任何结果。
  • @SANM2009 删除它,仍然没有结果。
  • 如果您是SELECT 'Employee Name',那么您的查询结果应该只给您字符串Employee Name,而不是实际的行值 - 这就是您所看到的吗?
  • ExecuteScalar 返回第一行的第一列。第一列数据类型是整数吗?为什么需要将结果转换为整数然后转换为字符串?为什么不直接做result.ToString()

标签: c# sql visual-studio visual-studio-2017


【解决方案1】:

首先,将您的代码更改为类似的内容。结果将是文字字符串“员工姓名”

    string query = "SELECT 'Employee Name' FROM dbo.Employees WHERE EmployeeID = @HolidayEmployeeID";

    using (SqlConnection cn = new SqlConnection())
    using (SqlCommand cmd = new SqlCommand(query, cn))
    {
        cmd.Parameters.Add("@HolidayEmployeeID", SqlDbType.UniqueIdentifier).Value = holiday_EmployeeIDTextBox.Text;
        cn.Open();
        dim result = cmd.ExecuteScalar();
        cn.Close();
        HolEmpName.Text = result.ToString();        
    }

【讨论】:

    【解决方案2】:

    您正在选择文字字符串 Employee Name 而不是列。

    string query = "SELECT 'Employee Name' FROM dbo.Employees WHERE EmployeeID = @HolidayEmployeeID;";
    

    【讨论】:

    • 我会假设它会返回 Employee Name 而不是空白
    • 也可能是你的查询没有返回记录,能不能在if里面加个断点,这样就知道输入了?
    【解决方案3】:

    我认为您的参数设置是问题所在。

    你需要去掉@符号,即

    cmd.Parameters.Add("HolidayEmployeeID", SqlDbType.UniqueIdentifier).Value = holiday_EmployeeIDTextBox.Text;

    【讨论】:

    • 不,@符号通常用于标识sql文本中的参数。
    • @ 符号是必需的。这不是问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2021-05-18
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多