将值发送到数据库,不要插入重复项

时间:2018-07-04 07:15:25

标签: c# webmethod

需要检查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可以正确获取值

谢谢!

2 个答案:

答案 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>
)