Sql 若数据库中不存在记录,则插入该记录;若数据库中已有记录,则向用户显示消息
如果数据库中不存在记录,我希望插入该记录。如果要插入的数据已存在于数据库中,则应向用户显示一个消息框,说明要插入的数据已存在于数据库中Sql 若数据库中不存在记录,则插入该记录;若数据库中已有记录,则向用户显示消息,sql,.net,windows,c#-4.0,ado.net,Sql,.net,Windows,C# 4.0,Ado.net,如果数据库中不存在记录,我希望插入该记录。如果要插入的数据已存在于数据库中,则应向用户显示一个消息框,说明要插入的数据已存在于数据库中 ALTER PROCEDURE sp_InsertRoles ( @roleName varchar(50), @roleStatus tinyint ) AS BEGIN SET NOCOUNT ON; IF EXISTS(SELECT * FROM tblRole WHERE roleName = @roleName and rol
ALTER PROCEDURE sp_InsertRoles
(
@roleName varchar(50),
@roleStatus tinyint
)
AS
BEGIN
SET NOCOUNT ON;
IF EXISTS(SELECT * FROM tblRole WHERE roleName = @roleName and roleStatus=@roleStatus)
BEGIN
SELECT 'FALSE'
END
ELSE
BEGIN
INSERT INTO tblRole
VALUES(@roleName,@roleStatus)
SELECT 'TRUE'
END
END
string cs=
ConfigurationManager.ConnectionString[“学校管理”系统属性。
设置.schoolManagementDBConnectionString“].ConnectionString;
SqlConnection con=新的SqlConnection(cs);
SqlCommand cmd=新的SqlCommand(“sp_InsertRoles”,con);
cmd.CommandType=CommandType.storedProcess;
cmd.Parameters.AddWithValue(“@roleName”,txtRole.Text);
cmd.Parameters.AddWithValue(“@roleStatus”,ddlStatus.SelectedItem);
con.Open()//连接打开
cmd.ExecuteNonQuery();
int count=Convert.ToInt32(cmd.ExecuteScalar());
如果(计数>0)
{
显示(“角色已退出…”,“失败”,MessageBoxButtons.OK,MessageBoxIcon.Information);
}
否则如果(countUseUse
为您的数据库对象使用块。这将确保即使出现错误,它们也会被关闭和释放。您将希望在using块之外声明count
,以便在连接关闭后使用它。您不希望在连接打开时显示消息框。连接是不可用的,并应在之前立即打开。执行…
并尽快关闭
使用.Add
方法代替.AddWithValue
请参阅
和
还有一个:
这是另一个
由于存储过程返回字符串True或False,我将count更改为布尔值,并调整了tneIf
块
private void UpdateDatabse()
{
string cs = ConfigurationManager.ConnectionStrings["School_Management_System.Properties.Settings.schoolManagementDBConnectionString"].ConnectionString;
bool count;
using (SqlConnection con = new SqlConnection(cs))
{
using (SqlCommand cmd = new SqlCommand("sp_InsertRoles", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@roleName",SqlDbType.VarChar, 50 ).Value = txtRole.Text;
cmd.Parameters.Add("@roleStatus",SqlDbType.TinyInt).Value = (int)ddlStatus.SelectedItem;
con.Open();
count = Convert.ToBoolean(cmd.ExecuteScalar());
}
}
if (count)
{
MessageBox.Show("Role inserted successfully...", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("Role already exits...", "Failed", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
INSERT..FROM..WHERE…
。在INSERT
之后添加一个OUTPUT
子句以返回新的ID。如果没有返回值,则行已经存在。您可以在roleName(+roleStatus)上创建一个唯一索引,因此插入相同的内容将引发异常,您可以捕获并通知用户。
private void UpdateDatabse()
{
string cs = ConfigurationManager.ConnectionStrings["School_Management_System.Properties.Settings.schoolManagementDBConnectionString"].ConnectionString;
bool count;
using (SqlConnection con = new SqlConnection(cs))
{
using (SqlCommand cmd = new SqlCommand("sp_InsertRoles", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@roleName",SqlDbType.VarChar, 50 ).Value = txtRole.Text;
cmd.Parameters.Add("@roleStatus",SqlDbType.TinyInt).Value = (int)ddlStatus.SelectedItem;
con.Open();
count = Convert.ToBoolean(cmd.ExecuteScalar());
}
}
if (count)
{
MessageBox.Show("Role inserted successfully...", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("Role already exits...", "Failed", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}