在C#中我们可以检查是否输入了重复值

时间:2017-08-28 23:40:53

标签: c# asp.net sql-server

我有一个网格视图,我正在尝试插入一个新值。在进行插入之前,需要检查输入的值是否已存在于DB中(不能重复)。 需要检查重复的列是varchar类型,它可以接受字符串中的最大字符(它可以有空格,也可以有其他特殊字符 - 它基本上是一个句子)。 例如。插入与工作相关的特定影响:(例如,对客户或客户服务的影响) 我们无法使此列在SQL Server中唯一,因为它被声明为varchar(max)。 我们可以从C#中检查这样的大字符串吗?

1 个答案:

答案 0 :(得分:0)

主要概念如下:

    private void dataGridView1_CellValueChanged_1(object sender, DataGridViewCellEventArgs e)
    {
        int columnToCheck = 0;//The index of the property/field/column you want to check
        if (e.ColumnIndex == columnToCheck)
        {
            using (var DB = new DataContext())
            {
                if (DB.YourTable.Where(v => v.id == dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString()).Count > 0)
                {
                    dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = "";
                    MessageBox.Show("This key already exists");
                    //Return the error message to your javascript in asp.net here
                }
            }
        }
    }

然而,在网站中,您必须进行ajax调用,因此无论您使用哪个数据表,都要查找与dataGridView的CellValueChanged事件类似的事件。如果您没有这样做,请尝试将onchanged =“”标记添加到其HTML元素定义中,例如<table class="table" id="tab" onchanged="eventfunction(this)"></table>并在您的javascript中按以下方式处理呼叫:

function eventfunction(element)
{
    //Use an ajax call to your controller from here
    var id = document.getElementById(element.id).innerText; //or however you can obtain the active cells' value
    $.ajax({
        url: "/api/ControllerName/ActionName",
        method: "POST",
        data: id,
        success: function (response)
            {
                //Handle the return call here
            },
        error: function (response)
            {
                //Or here if you return an error message
            }
        });
}

或者您可以像这样使用jQuery的事件处理:

$("#tab").on("onchange", function()
{
    //Your code here
});

您的控制器可能如下所示:

    [HttpPost]
    public Customer GetCustomer(string id)
    {
       //LINQ Where validation here
    }