将值发送到数据库,不要插入重复项
Send values to the database, don't insert duplicates
需要检查 TextBox 中的值是否已经存在于数据库中,以及是否不需要再次将其保存在数据库中。
这是文本框代码:
<tr>
<td>
<asp:Label ID="lblProductConstruction" runat="server" Text="Product Construction:" Font-Names="Open Sans"></asp:Label></td>
<td>
<asp:TextBox ID="txtProductConstruction" runat="server" Font-Names="Merriweather" margin-Left="100px" ></asp:TextBox><br />
</td>
</tr>
<tr>
保存按钮:
<input type="button" class="button" id="myButton" value="Save"/>
Ajax 按钮点击:
$(function () {
$('#myButton').on('click', function () {
var lvl = $('#MainContent_txtProductConstruction').val()
$.ajax({
type: "POST",
url: "NewProductConstruction.aspx/GetCollection",
data: JSON.stringify({'lvl': lvl }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
alert("Saved successfully.");
console.log(response);
location.reload(true);
},
error: function (response) {
alert("Not Saved!");
console.log(response);
location.reload(true);
}
});
});
});
获取值并将该参数 (@ObjekatName) 发送到数据库的 Web 方法:
[WebMethod(EnableSession = true)]
public static void GetCollection(string lvl)
{
string conn = ConfigurationManager.ConnectionStrings["Connection"].ConnectionString;
using (SqlConnection connection = new SqlConnection(conn))
try
{
connection.Open();
SqlCommand cmdCount = new SqlCommand("getDuplicate", connection);
cmdCount.CommandType = CommandType.StoredProcedure;
cmdCount.Parameters.AddWithValue("@ObjekatName", lvl);
cmdCount.ExecuteNonQuery();
int count = (int)cmdCount.ExecuteScalar();
if (count > 0)
{
connection.Close();
}
else
{
SqlCommand cmdProc = new SqlCommand("InsertObjekat", connection);
cmdProc.CommandType = CommandType.StoredProcedure;
cmdProc.Parameters.AddWithValue("@ObjekatName", lvl);
cmdProc.ExecuteNonQuery();
//strMsg = "Saved successfully.";
}
}
catch
{
}
finally
{
connection.Close();
}
return;
第一个过程是 select,它试图在数据库中查找值。
如果此 select 找到某些内容,则计数必须大于 0,这应该会关闭连接。
如果 select 没有 return 任何东西,那么必须将这个新值插入数据库。
我已经执行并测试了这些存储过程,它们运行良好。
问题出在 C# 中,我想我在这里做错了什么,这不能正常工作。
有人可以帮我处理 c# 部分吗?
顺便说一句:Ajax 工作正常并且 WebMethod 正确地获取了值
提前致谢!
这行代码可能有问题
cmdCount.ExecuteNonQuery();
int count = (int)cmdCount.ExecuteScalar();
按照这个命令两次一次 executenonquery
然后 executescalar
,
根据您的要求,应该只有一个调用 ExecuteScalar
,所以注释掉 ExecuteNonQuery
//cmdCount.ExecuteNonQuery(); comment not needed
int count = (int)cmdCount.ExecuteScalar();
您可以检查重复项并在同一过程中插入值,而不是从 C# 执行两次。
CREATE OR REPLACE PROCEDURE getDuplicate (ObjekatName IN VARCHAR2)
AS
V_COUNT NUMBER;
BEGIN
SELECT COUNT (1)
INTO V_COUNT
FROM TABLENAME
WHERE CatName = ObjekatName;
IF (V_COUNT = 0)
THEN
**-- insert command**
END IF;
END;
需要检查 TextBox 中的值是否已经存在于数据库中,以及是否不需要再次将其保存在数据库中。
这是文本框代码:
<tr>
<td>
<asp:Label ID="lblProductConstruction" runat="server" Text="Product Construction:" Font-Names="Open Sans"></asp:Label></td>
<td>
<asp:TextBox ID="txtProductConstruction" runat="server" Font-Names="Merriweather" margin-Left="100px" ></asp:TextBox><br />
</td>
</tr>
<tr>
保存按钮:
<input type="button" class="button" id="myButton" value="Save"/>
Ajax 按钮点击:
$(function () {
$('#myButton').on('click', function () {
var lvl = $('#MainContent_txtProductConstruction').val()
$.ajax({
type: "POST",
url: "NewProductConstruction.aspx/GetCollection",
data: JSON.stringify({'lvl': lvl }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
alert("Saved successfully.");
console.log(response);
location.reload(true);
},
error: function (response) {
alert("Not Saved!");
console.log(response);
location.reload(true);
}
});
});
});
获取值并将该参数 (@ObjekatName) 发送到数据库的 Web 方法:
[WebMethod(EnableSession = true)]
public static void GetCollection(string lvl)
{
string conn = ConfigurationManager.ConnectionStrings["Connection"].ConnectionString;
using (SqlConnection connection = new SqlConnection(conn))
try
{
connection.Open();
SqlCommand cmdCount = new SqlCommand("getDuplicate", connection);
cmdCount.CommandType = CommandType.StoredProcedure;
cmdCount.Parameters.AddWithValue("@ObjekatName", lvl);
cmdCount.ExecuteNonQuery();
int count = (int)cmdCount.ExecuteScalar();
if (count > 0)
{
connection.Close();
}
else
{
SqlCommand cmdProc = new SqlCommand("InsertObjekat", connection);
cmdProc.CommandType = CommandType.StoredProcedure;
cmdProc.Parameters.AddWithValue("@ObjekatName", lvl);
cmdProc.ExecuteNonQuery();
//strMsg = "Saved successfully.";
}
}
catch
{
}
finally
{
connection.Close();
}
return;
第一个过程是 select,它试图在数据库中查找值。 如果此 select 找到某些内容,则计数必须大于 0,这应该会关闭连接。 如果 select 没有 return 任何东西,那么必须将这个新值插入数据库。
我已经执行并测试了这些存储过程,它们运行良好。 问题出在 C# 中,我想我在这里做错了什么,这不能正常工作。 有人可以帮我处理 c# 部分吗? 顺便说一句:Ajax 工作正常并且 WebMethod 正确地获取了值
提前致谢!
这行代码可能有问题
cmdCount.ExecuteNonQuery();
int count = (int)cmdCount.ExecuteScalar();
按照这个命令两次一次 executenonquery
然后 executescalar
,
根据您的要求,应该只有一个调用 ExecuteScalar
,所以注释掉 ExecuteNonQuery
//cmdCount.ExecuteNonQuery(); comment not needed
int count = (int)cmdCount.ExecuteScalar();
您可以检查重复项并在同一过程中插入值,而不是从 C# 执行两次。
CREATE OR REPLACE PROCEDURE getDuplicate (ObjekatName IN VARCHAR2)
AS
V_COUNT NUMBER;
BEGIN
SELECT COUNT (1)
INTO V_COUNT
FROM TABLENAME
WHERE CatName = ObjekatName;
IF (V_COUNT = 0)
THEN
**-- insert command**
END IF;
END;