【问题标题】:Control for correct input with SQL in C#在 C# 中使用 SQL 控制正确输入
【发布时间】:2016-01-18 09:42:54
【问题描述】:
        txtBox2.Enabled = false;
        //made by francisco juliao
        Convert.ToInt32(txtBox1.Text);
        int Ticket = Convert.ToInt32(txtBox1.Text);
        SqlConnection mySC = new SqlConnection();
        SqlCommand com = new SqlCommand();
        mySC.ConnectionString = ("Data Source=localhost;Initial Catalog=RCA;Integrated Security=True");
        mySC.Open();
        com.Connection = mySC;
        com.CommandText = (@"SELECT Ticketid * FROM RCA)
            VALUES ('" + txtBox1.Text + "','" + output+ "');");
        mySC.Close();
       if (Ticket = //SQL ticketID check here.
            txtBox2.Enabled = true;
            MessageBox.Show("Valid ID! Input email now.");
            label1.Text = "Enter your email now.";
        }
        else
        {
            MessageBox.Show("Incorrect!");
        }

所以我希望我的 C# 应用程序检查用户键入的 ticketID(txtBox1.Text) 是否在 SQL 服务器中。我不知道我会怎么做。如果输入正确,则标签更改并且textbox2 被启用。如果在 sql 数据库中未找到电子邮件,则会显示一个带有文本“incorrect!”的消息框。任何帮助将不胜感激!

【问题讨论】:

  • 对于SELECT 语句使用ExecuteNonQuery 是没有意义的。你实际上试着说:INSERT INTO RCA
  • 我删除了 executenonquery
  • 我猜你也是 SQL 新手吧?因为那句话看起来像半人马——前面是SELECT,后面是INSERT
  • 非常新:P。不过,与它一起工作很有趣。
  • 此评论有点离题,因此请仅将其视为长期有用的知识。根据您的问题,我假设您是缺乏技能的编程新手。不过,你似乎有潜力,这很棒。当涉及到与数据库的通信时,我建议使用实体框架——反正你很快就会到那里,呵呵。此外,为了以旧式方式与数据库通信,您可能需要使用 SqlDataAdapter 类(请参阅接受的答案)。它对我帮助最大。

标签: c# sql sql-server


【解决方案1】:

您应该更改 textbox1 的 Lost Focus 事件的代码,即您的 TicketID 文本框。

应该是这样的

private void txtBox1_LostFocus(object sender, RoutedEventArgs e)
{
    SqlConnection mySC = new SqlConnection();
    SqlDataReader reader;
    mySC.ConnectionString = ("Data Source=localhost;Initial Catalog=RCA;Integrated Security=True");
    mySC.Open();
    string sql = @"SELECT * FROM RCA Where Ticketid = @tktid;";
    using(var command = new SqlCommand(sql, mySC))
    {
        command.Parameters.Add("@tktid", txtBox1.Text);
        reader = command.ExecuteReader();
    }
    if(reader.HasRows)
    {
        //Here you change the Label with LabelName I have used string to show.
        string Lbllabel = "Change";
        txtEmail.IsEnabled = true;
    }
    mySC.Close();
}

现在要检查电子邮件,您应该在 TxtEmail_LostFocus 上使用相同的内容

private void txtEmail_LostFocus(object sender, RoutedEventArgs e)
{
    SqlConnection mySC = new SqlConnection();
    SqlDataReader reader;
    mySC.ConnectionString = ("Data Source=localhost;Initial Catalog=RCA;Integrated Security=True");
    mySC.Open();
    string sql = @"SELECT * FROM RCA Where EmailID = @emailid;";
    using(var command = new SqlCommand(sql, mySC))
    {
        command.Parameters.Add("@emailid", txtEmail.Text);
        reader = command.ExecuteReader();
    }
    if(reader.HasRows)
    {
        //Email Exsist in the dataBase.
    }
    else
    {
        MessageBox("Incorrect!!");
    }
    mySC.Close();
}

【讨论】:

    【解决方案2】:

    首先你将文本转换为 int

    Convert.ToInt32(txtBox1.Text);
    

    但是你没有对结果做任何事情!? 比如这样:

    int a = Convert.ToInt32(txtBox1.Text);
    

    使用 Convert.toInt32() 不会更改文本框中的任何内容。 它只是获取文本的字符串并将其转换为 int。

    如果你想通过检查它是否是一个数字来验证条目,你可以这样做:

    try{
    int a = Convert.ToInt32(txtBox1.Text);
    }
    catch{
    // error, txtBox1.Text could not be converted to int (it contains letters)
    }
    

    要检查ticketID是否在表中,请执行如下sql语句:

    cmd.Commandtext = "SELECT Count(*) FROM RCA WHERE ticketID = '" + txtBox.text + "'";
    

    之后,您像查询一样执行它并将结果安全地保存在阅读器中

    SqlDataReader reader = cmd.ExecuteReader();
    

    比你阅读阅读器的结果,看看是否匹配

    ...或者你可以像 Mohit Shrivastava 说的那样做。 非常漂亮和闪亮! :D

    【讨论】:

    • 已修复!谢谢,我是 C# 新手。我的答案仍然没有得到回答。
    • 您想如何验证条目?检查是不是数字?
    • @S.Jerk 该行具有验证输入的优势,因为 OP 将其作为字符串连接到他们的查询中 - 至少 Convert 行将引发异常并避免潜在的 SQL注射。
    • 带sql。如果 ticketID 在 sql 表中,那么用户将能够输入 txtbox2。
    • 编辑了我的帖子。虽然我仍然没有答案。我希望我的代码检查 TicketID 是否在 SQL 表中。
    猜你喜欢
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多