这是我得到的错误:
其他信息:对象或列名称丢失或为空。对于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();
}
答案 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();
}