如何查找给定输入值的数据库中存在的行数
本文关键字:数据库 存在 输入 何查找 查找 | 更新日期: 2023-09-27 18:32:46
我有一个名为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();
}
忽略字符串拆分位。这都可以正常工作,它只是为我不知道该怎么做的发生列添加一个计数器。
有人可以指出我正确的方向吗?
在插入之前,您必须检查是否已插入带有名称的记录,如果是,只需更新计数,否则,插入新记录。我会将其转换为存储的过程
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 方法中取出循环语句,并将其转换为更通用的方法,该方法接受单个人名并保存到 db。这样您就可以从任何场景调用它(循环中的一次或 n 次)
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;
}
有。 如果您熟悉 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]
}
当然,首先您必须读取当前值(使用 SELECT 查询),然后创建一个 UPDATE sql 语句,该语句将更新数据库中的字段。每次递增 1。
以下是通过
代码更新数据库字段的方法:
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:读取当前值(如果存在)第二次将其递增 1 并更新字段
希望对您有所帮助。再见