从数据库加载数据时如何解决运行时错误“对象或列名称丢失或为空。”

时间:2019-03-23 07:46:04

标签: c# sql-server

这是我得到的错误:

  

其他信息:对象或列名称丢失或为空。对于SELECT INTO语句,请验证每个列都有一个名称。对于其他语句,请查找空别名。不允许将别名定义为“”或[]。将别名更改为有效名称。

运行此代码时;它应该将数据从SQL Server加载到Winforms

private void click(int y)
{
    Edit();
    clear_invo();

    SqlConnection con = new SqlConnection(@"Data Source=ANSARI-PC\;Initial Catalog=BMS;Integrated Security=True");

    string tname = "";

    if (str == "Pur")
    {
        tname = "PurchaseT";
    }
    else if (str == "GRO")
    {
        tname = "Gro_Chln_T";
    }
    else if (str == "Gri-Chln_T")
    {
        tname = "GRI";
    }
    else if (str == "Job")
    {
        tname = "JobT";
    }

    string sql1 = "select * from [" + tname + "]";

    SqlDataAdapter sda1 = new SqlDataAdapter(sql1, con);
    DataSet dsi = new DataSet();

    con.Open();
    sda1.Fill(dsi);

    int bene_id = -1;

    try
    {
        idtxt.Text = dsi.Tables[0].Rows[y][0].ToString();
        bene_id = Convert.ToInt32(dsi.Tables[0].Rows[y][1]);               
    }
    catch (Exception ex)
    {
        if (!(idtxt.Text == null))
        {
            MessageBox.Show(ex.Message);
        }
    }

    con.Close();

    load_bene(bene_id);

    string challan_id =str+"-"+ idtxt.Text;
    Load_item(challan_id);            

    No_Edit();
}

1 个答案:

答案 0 :(得分:1)

我会在if语句的末尾添加一个默认的“ else”。如果您点击了该按钮,那么您就有了答案...您不满足if语句条件。

此外,考虑将if语句交换为switch语句。

更新#1

这是用switch语句重写并抛出自定义异常的函数。我还自由地重构了您的数据库代码,并实现了字符串插值。

仅根据前面的评论进行澄清,问题看起来好像您的IF ... ELSE语句不足。 “ str”的值等于“ Pur”,“ GRO”,“ Gri-Chln-T”或“ Job”之外的其他值,因此,当这些都不匹配时,您的“ tname”变量仍然没有值。

然后,您可以使用此空变量来构造SELECT查询,该查询等于“ SELECT * FROM []”。

作为旁注,除非您绝对需要表中的每一行以及该表中的每一列,否则我也建议不要从查询中返回*。

public class TableIdentificationException : Exception
{
}

private void click(int y)
{
    Edit();
    clear_invo();

    var tname = string.Empty;

    switch (str)
    {
        case "Pur":
            tname = "PurchaseT";
            break;
        case "GRO":
            tname = "Gro_Chln_T";
            break;
        case "Gri-Chln_T":
            tname = "GRI";
            break;
        case "Job":
            tname = "JobT";
            break;
        default:
            var ex = new TableIdentificationException();
            ex.Data.Add("LookupString", str);
            throw ex;
    }

    var bene_id = -1;

    using (var con = new SqlConnection(@"Data Source=ANSARI-PC\;Initial Catalog=BMS;Integrated Security=True"))
    {
        var sql1 = $"select * from [{tname}]";

        using (var sda1 = new SqlDataAdapter(sql1, con))
        {
            var dsi = new DataSet();

            sda1.Fill(dsi);

            try
            {
                idtxt.Text = dsi.Tables[0].Rows[y][0].ToString();
                bene_id = Convert.ToInt32(dsi.Tables[0].Rows[y][1]);
            }
            catch (Exception ex)
            {
                if (idtxt.Text != null) MessageBox.Show(ex.Message);
            }
        }
    }

    load_bene(bene_id);

    var challan_id = $"{str}-{idtxt.Text}";

    Load_item(challan_id);

    No_Edit();
}