C# 检查SQL数据库中是否存在用户ID

C# 检查SQL数据库中是否存在用户ID,c#,sql,database,user-input,verification,C#,Sql,Database,User Input,Verification,我是一名初级程序员,正在编写一个C#应用程序,用于查询数据库。但是,我想知道如何检查ID是否存在(ID由用户在控制台应用程序中输入),如果不存在,则显示消息 这是我的密码: Console.WriteLine("enter ID"); try { var province_id = Convert.ToInt32(Console.ReadLine()); var aquery2 = from test in context.BusinessEntityAddress

我是一名初级程序员,正在编写一个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{}
中,因为我还需要确保用户输入是整数


谢谢

对于典型的用户错误,例如数字解析,您不应该使用
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
}

对于典型的用户错误,如数字解析,不应使用
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
}

看起来你想做的比在你的问题中搜索用户ID更多?你好像在说StateProvinceId是用户Id?在这种情况下,像这样的简单测试就足够了:

if (!context.Addresses.Any(a => a.StateProvinceID == userid))
{
   Console.WriteLine("User doesn't exist");
}
尽管如此,查看用户表似乎更符合逻辑。例如,context.Users。因此,这会问你为什么要做一个分组(这是不必要的)


您将需要将每个数据对象添加到您的上下文中,但如果您能详细说明哪些数据对象不起作用,我们可以提供更多帮助。

您似乎正在尝试做更多的工作,而不仅仅是在问题中搜索用户ID?你好像在说StateProvinceId是用户Id?在这种情况下,像这样的简单测试就足够了:

if (!context.Addresses.Any(a => a.StateProvinceID == userid))
{
   Console.WriteLine("User doesn't exist");
}
尽管如此,查看用户表似乎更符合逻辑。例如,context.Users。因此,这会问你为什么要做一个分组(这是不必要的)


您需要将每个数据对象添加到您的上下文中,但如果您能详细说明哪些数据对象不起作用,我们可以提供更多帮助。

您不需要在尝试中运行代码,而是首先必须检查用户是否存在:

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),这样您不仅可以检查字符串是否为数字,还可以检查字符串是否为整数。

您不需要在尝试中运行代码,而是首先必须检查用户是否存在:

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),这样您不仅可以检查字符串是否为数字,还可以检查字符串是否为整数。

这就是我正在使用的代码。我不了解控制台应用程序,但对C#和SQL知之甚少。我不确定我是否理解清楚,但希望这能对你有所帮助。多谢各位

bool idfound; (declare in the field of a Class)

private void buttonIDcheck_Click(object sender, RoutedEventArgs e)
(必须由Visual Studio创建而不是手动创建的事件)


这就是我正在使用的代码。我不了解控制台应用程序,但对C#和SQL知之甚少。我不确定我是否理解清楚,但希望这能对你有所帮助。多谢各位

bool idfound; (declare in the field of a Class)

private void buttonIDcheck_Click(object sender, RoutedEventArgs e)
(必须由Visual Studio创建而不是手动创建的事件)


您将用户存储在哪个表中?这里我的变量名不是很好。它将userid与省ID进行比较。StateProvinceID包含所有省ID,我检查用户输入(userid)=省ID(在StateProvinceID中)您将用户存储在哪个表中?这里我的变量名不是很好。它将userid与省ID进行比较。StateProvinceID包含所有省ID,我检查用户输入(userid)=省ID(在StateProvinceID中)我忘了提到我的整个代码正在尝试{}阻止,因为我还需要确保用户只输入整数。也就是说,您的代码似乎有效(没有错误),但它不起作用。如果我输入一个不存在的ID,它只会返回菜单而不显示消息。尽管我的try catch有效,如果用户输入的不是整数,它会显示一条消息。然后您必须检查用户是否输入了整数。我的意思是,如果您可以检查可能的错误,而不是使用
try-catch
语句,那么您应该这样做。它现在应该可以工作了。如果(!int.TryParse(provinceid,NumberStyles.Integer,new NumberFormatInfo(),out number))行返回我一个错误“错误1与‘int.TryParse(string,System.Globalization.NumberStyles,System.IFormatProvider,out int)匹配的最佳重载方法”有一些无效参数“立即检查”。无论如何,请参考以了解更多信息。我忘了提到我的整个代码都在try{}块中,因为我还需要确保用户只输入整数。也就是说,您的代码似乎有效(无错误),但不起作用。如果我输入不存在的ID,它只会返回菜单而不显示消息。我的try-catch仍然有效,如果用户输入的不是整数,它会显示一条消息。然后您必须检查用户是否输入了整数。我的意思是,如果您可以检查可能的错误,而不是使用
try-catch
语句,那么您应该这样做。它现在应该可以工作了。如果(!int.TryParse(provinceid,NumberStyles.Integer,new NumberFormatInfo(),out number))行返回我一个错误“错误1与‘int.TryParse(string,System.Globalization.NumberStyles,System.IFormatProvider,out int)匹配的最佳重载方法”有一些无效参数“立即检查”。无论如何,请参阅以了解更多信息。我编辑了我的问题,并提供了一些详细信息。也就是说,我尝试了您的代码,但if(aquery2.Any())似乎不起作用,它永远不会满足该条件(如果我输入了不存在的ID,它只会返回到菜单)。但是,我的try-catch语句似乎起作用(如果我输入的不是整数,它将不起作用)