如何查找给定输入值的数据库中存在的行数?

时间:2012-04-28 15:40:16

标签: c# sql database counter

我有一个名为Setup的工作数据库,其中包含下表。

tblPeople
-----------------
people  nchar(50)
occur   int

我的Windows窗体应用程序从文本框中加载用户输入的数据(人),但我无法弄清楚如何设置它以便如果(人)数据已全部准备好输入,再次将它添加到数据库中,我希望它在发生列中计数。例如,如果Fred输入两次,则应显示。

people occur
------ -----
Fred     2

代码

SqlConnection connection = new SqlConnection();
connection.ConnectionString = (@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\John\Desktop\database practise\db1\db1\Setup.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
SqlCommand command = new SqlCommand();
command.Connection = connection;

connection.Open();
command.CommandText = "INSERT INTO tblPeople  (people) VALUES (@people)";

try
{
    string[] splittext = textbox1.Text.Split(' '); 
    foreach (string ppl in splittext)
    {
        if (ppl.StartsWith("*")) 
        {
            command.Parameters.AddWithValue("@people", ppl);
            int rowsAffected = command.ExecuteNonQuery();
            MessageBox.Show("Inserted: " + rowsAffected.ToString());
        }
    }
}
finally
{
    connection.Close();
}

忽略字符串拆分位。这一切都很好,它只是为发生的列添加一个计数器,我不知道该怎么做。

有人能指出我正确的方向吗?

4 个答案:

答案 0 :(得分:1)

在插入之前,您必须检查是否已使用名称插入记录,如果是,则只更新计数,否则,插入新记录。我会将其转换为存储过程

CREATE PROCEDURE SavePeople(@peopleName varchar(50))
AS
 BEGIN
   IF EXISTS(SELECT PEOPLE FROM tbl_PEOPLE WHERE PEOPLE=@peopleName)
    BEGIN
      UPDATE tbl_People Set Occur=OCcur+1 WHERE PEOPLE=@peopleName
    END
   ELSE
    BEGIN
      INSERT INTO (PEOPLE,OCCUR) VALUES (@peopleNAme,1)
    END

 END

我会将你的代码包装在using语句中。我将从save方法中取出循环语句,并将其转换为更通用的方法,该方法将单个People Name保存并保存到db。这样你就可以从任何场景中调用它(一次或一次循环)

string con=@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\John\Desktop\database practise\db1\db1\Setup.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"

public bool SavePeople(string peopleName)
{
   try
   {
      using (SqlConnection objConnection = new SqlConnection(con))
      {
        SqlCommand objCommand = new SqlCommand("SavePeople", objConnection);
        objCommand.CommandType = CommandType.StoredProcedure;
        objCommand.Parameters.AddWithValue("@peopleName", peopleName);       
        objConnection.Open();
        objCommand.ExecuteNonQuery();       
      }
      return true;
   }
   catch(Exception ex)
   {
      //You want to log the ex
   }
   return false; 
}

答案 1 :(得分:0)

有。如果您熟悉Linq,它可以让您轻松地进行检查。我正在使用你已经知道如何做的代码的一些快捷方式。

string checkname = "Fred";
var x = tblPeople.Where(w => w.people == checkname);
if (x.Count > 0) 
{
  x.occur++;
  [databaseconnectionstring].SubmitChanges();
}
else 
{
  [insert your new record here]
}

答案 2 :(得分:0)

当然,首先你需要读取当前值(使用SELECT查询),然后创建一个UPDATE sql语句,它将更新db中的字段。每次增加一个。

答案 3 :(得分:0)

以下是使用代码更新db`s字段的方法:

        using (SqlConnection conn = new SqlConnection("connString"))
        {
            int counter = 0;
            using (SqlCommand cmd = new SqlCommand("SELECT people FROM tblPeople", conn))
            {
                conn.Open();
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    if (reader.GetValue(0) != DBNull.Value)
                    {
                        counter = (int)reader[0];
                    }
                }
            }
            using (SqlCommand cmd = new SqlCommand("UPDATE tblPeople SET people = @myCounter", conn))
            {
                cmd.Parameters.Add("@myCounter", System.Data.SqlDbType.Int).Value = ++counter;
                cmd.ExecuteNonQuery();
            }
        }

1st:读取当前值(如果存在) 第二次增加一个并更新字段

希望它有所帮助。 再见