需要检查TextBox中的值是否已经存在于数据库中,以及是否不想再次将其保存在数据库中。
这是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)发送到数据库的WebMethod:
[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;
第一个步骤是尝试在数据库中查找值的选择。 如果此选择找到了某些内容,则Count必须大于0,这将关闭连接。 如果select不返回任何内容,则必须在数据库中插入此新值。
我已经执行并测试了这些存储过程,它们工作正常。 问题是在C#中,我认为我在这里做错了什么,这不能正常工作。 有人可以帮我C#部分吗? 顺便说一句:Ajax可以正常工作,并且WebMethod可以正确获取值
谢谢!
答案 0 :(得分:0)
这行代码可能有问题
cmdCount.ExecuteNonQuery();
int count = (int)cmdCount.ExecuteScalar();
根据此命令,两次命令executenonquery
然后是executescalar
,
根据您的要求,只能打一个电话ExecuteScalar
,因此请注释掉ExecuteNonQuery
//cmdCount.ExecuteNonQuery(); comment not needed
int count = (int)cmdCount.ExecuteScalar();
答案 1 :(得分:0)
您可以检查重复项并将值插入同一过程中,而不用从C#中执行两次。
const SignUp = (
{displayName,
signUpEmail,
signUpPassword,
handleDisplayNameChange,
handleSignUpEmailChange,
handleSignUpPasswordChange,
startSignUp}
) => (
<div>
<div>
<label>
<span>Name</span>
<input type="text" value={displayName} onChange={handleDisplayNameChange} />
</label>
<label>
<span>Email</span>
<input type="email" value={signUpEmail} onChange={handleSignUpEmailChange} />
</label>
<label >
<span>Password</span>
<input type="password" value={signUpPassword} onChange={handleSignUpPasswordChange} />
</label>
<button type="button" onClick={startSignUp}>Sign up</button>
</div>
</div>
)