Я бы добавил по умолчанию "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();
}