我是一名初级程序员,正在编写一个C#应用程序,用于查询数据库。然而,我想知道如何检查ID
是否存在(ID
是用户在控制台应用程序中输入的),如果不存在,则显示一条消息。
这是我的代码:
Console.WriteLine("enter ID");
try
{
var province_id = Convert.ToInt32(Console.ReadLine());
var aquery2 = from test in context.BusinessEntityAddress
where test.Address.StateProvinceID == province_id
group test.BusinessEntity.Person.LastName by new { test.BusinessEntityID, test.BusinessEntity.Person.LastName, test.BusinessEntity.Person.FirstName }
into balk
select new {
...
};
没有粘贴整个代码,但这是我的问题所在。在线
where test.Address.StateProvinceID == userid
我想检查数据库中是否存在该ID,如果不存在,则显示一条消息。我不知道该怎么做。
注意,所有的代码都已经在try{}catch{}
中了,因为我还需要确保用户输入是一个整数。
感谢
在您的问题中,您似乎要做更多的工作,而不仅仅是搜索用户ID?你似乎是在说StateProvinceId是用户Id?在这种情况下,像这样的简单测试就足够了:
if (!context.Addresses.Any(a => a.StateProvinceID == userid))
{
Console.WriteLine("User doesn't exist");
}
不过,在用户表中查找似乎更合乎逻辑。EG,上下文。用户。因此,这会质疑你为什么要按(不应该需要的)分组。
您需要将每个数据对象添加到上下文中,但如果您能详细说明哪些数据对象不起作用,我们可以提供更多帮助。
您不需要在尝试中运行代码,而是首先必须检查用户的存在:
int number;
//check if the userId is an integer
if(!int.TryParse(userId, out number)){
Console.WriteLine("Please enter a valid interger!!");
return;
}
var beAddress = context.BusinessEntityAddress;
//check for the userId exist in the DB
var flag = beAddress.Any(a => a.Address.StateProvinceID == number);
if(flag){
//do something if the user exist
}
else{
//do something else if the user doesn't exist
}
为了检查字符串是否是有效的整数,您应该使用int.TryParse("8", NumberStyles.Integer, System.Globalization.NumberFormatInfo.InvariantInfo, out number);
,这样您不仅要检查字符串是否为数字,还要检查它是否为整数。
对于典型的用户错误,比如数字解析,不应该使用try-catch
。int.TryParse()
是为此而制作的:
// get rid of the try-catch, you wont need it anymore
int userid;
var input = Console.ReadLine();
if (!int.TryParse(input, out userID))
{
Console.WriteLine("Invalid input : '{0}' is not a number", input);
return;
}
var aquery2 = from test in context.BusinessEntityAddress
where test.Address.StateProvinceID == userid
group test.BusinessEntity.Person.LastName by new { test.BusinessEntityID, test.BusinessEntity.Person.LastName, test.BusinessEntity.Person.FirstName } into balk
select new
{
/* ... */
};
if (!aquery2.Any())
{
// not found... display a message
}
else
{
// found... do stuffs
}
这是我正在使用的代码。我不了解控制台应用程序,但对C#和SQL知之甚少。我不确定我是否理解清楚,只是希望这能对你有所帮助。非常感谢。
bool idfound; (declare in the field of a Class)
private void buttonIDcheck_Click(object sender, RoutedEventArgs e)
(必须由Visual Studio创建的事件,而不是手动创建)
{
SqlConnection Conn = new SqlConnection();
Conn.ConnectionString = yourConnectionString;
Conn.Open();
SqlCommand check_idexistcomm = new SqlCommand();
check_idexistcomm.Connection = Conn;
check_idexistcomm.CommandText = "SELECT id FROM yourtable";
var check_idexistda = new SqlDataAdapter(check_idexistcomm);
SqlDataReader check_idexistreader = check_idexistcomm.ExecuteReader();
while (check_idexistreader.Read())
{
if (check_idexistreader["id"].ToString()== text value inputed by user here)
{
idfound = true;
break;
}
}
check_idexistreader.Close();
Conn.Close();
if (idfound=true)
{
your code here to accept the user as authorized
}
else
{
MessageBox.Show("Sorry, you're not authorized");
}
}