【发布时间】:2018-06-26 13:37:38
【问题描述】:
public void addintovisitor()
{
string companyname = (txtvisitor.Text.ToUpper());
DataSet result = new DataSet();
visitorcompany vc = new visitorcompany();
string Location1 = Convert.ToString(Session["location"]);
vc.checksamecompanyname(ref result, Location1);
for (int i = 0; i < result.Tables["details"].Rows.Count; i++)
{
if (companyname == result.Tables["details"].Rows[i]["Companyname"].ToString())
{
}
else
{
string strConn = Convert.ToString(ConfigurationManager.ConnectionStrings["connectionstring"]);
SqlConnection conn = new SqlConnection(strConn);
SqlCommand cmd = new SqlCommand(
"INSERT INTO tblVisitorcompany ([CompanyName], " +
"[Location1]) " +
"VALUES(@CompanyName, @Location1)", conn);
cmd.Parameters.AddWithValue("@Companyname", companyname);
cmd.Parameters.AddWithValue("@Location1", Location1);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
}
我的访客公司类:
public int checksamecompanyname(ref DataSet result, string Location1)
{
string strConn = Convert.ToString(
ConfigurationManager.ConnectionStrings
["connectionstring"]);
SqlConnection conn = new SqlConnection(strConn);
SqlCommand cmd = new SqlCommand
("select Companyname from tblVisitorcompany where Location1 ='" + Location1 + "'", conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
conn.Open();
da.Fill(result, "details");
conn.Close();
//Return 0 when no error occurs.
return 0;
}
我正在尝试一次搜索一行以检查 sql 表是否具有相同的公司名称。如果已经存在公司名称,则程序将不执行任何操作。如果这是一个新的公司名,程序会将公司名添加到 sql 表中。但是,当添加新的公司名称时,程序会添加不止一次。有人可以帮我重新编辑我的程序,使它只添加一个新的公司名称。非常感谢。
【问题讨论】:
-
如果要读取数据,应使用
SELECT语句并执行ExecuteReader而不是ExecuteNonQuery。要解决重复的真正问题,您应该在companyname列上创建一个unique key,然后您可以在C# 中处理异常。 -
a) 您应该让您的数据库阻止您在不需要的行中插入两次,您可以使用自动生成的 id 作为主键并对公司名称进行唯一约束 b) 您需要决定是否要插入一次,如果重复则跳过,或者更新其他字段。如果要更新,请参阅合并:docs.microsoft.com/en-us/sql/t-sql/statements/… 否则请参阅“如果不存在 ...”stackoverflow.com/questions/1175217/…
-
关于上面的cmets,暗示了更好的数据库设计,这样搜索数据库效率不高,最好让数据库为您完成工作。即 "SELECT COUNT(*) FROM tblVistorCompany WHERE Companyname like '" + name + "'";