Как исправить ошибку во время выполнения при загрузке данных из базы данных «Имя объекта или столбца отсутствует или пусто». - PullRequest
1 голос
/ 23 марта 2019

Это ошибка, которую я получаю:

Дополнительная информация: имя объекта или столбца отсутствует или пусто. Для операторов 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 Ответ

1 голос
/ 23 марта 2019

Я бы добавил по умолчанию "else" в конец вашего оператора if.Если вы нажмете на это, то получите ответ ... Вы не соответствуете условиям оператора 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...