Проверка наличия текста в SQL Server с помощью C #

2

Я впервые строю простую систему ERP, используя С# и SQL Server. Я пытаюсь проверить, существует ли уже значение из textBox в базе данных; когда форма и ввод в поля, я получаю исключение

Вот функция проверки:

    private void txtRef_Validated(object sender, EventArgs e)
    {          
        BL.CLS_PRODUCTS prd = new BL.CLS_PRODUCTS();
        DataTable Dt = new DataTable();
        Dt = prd.VarifyProductID(txtRef.Text);

        if (Dt.Rows.Count > 0)
        {
            MetroMessageBox.Show(this, "الصنف موجود مسبقاً", "تنبيه", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            txtRef.Focus();
            txtRef.SelectionStart = 0;
            txtRef.SelectionLength = txtRef.Text.Length;
        }
    }

Таблица данных, которая останавливается на

da.Fill(dt);

public DataTable SelectData(string stored_procedure, SqlParameter[] param)
{
        SqlCommand sqlcmd = new SqlCommand();
        sqlcmd.CommandType = CommandType.StoredProcedure;
        sqlcmd.CommandText = stored_procedure;
        sqlcmd.Connection = sqlconnection;

        if (param != null)
        {
            for (int i = 0; i < param.Length; i++)
            {
                sqlcmd.Parameters.Add(param[i]);
            }
        }

        SqlDataAdapter da = new SqlDataAdapter(sqlcmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        return dt;
    }

и вот моя функция проверки проверки:

public DataTable VerifyProductID(string ID)
{
    DAL.DataAccessLayer DAL = new DAL.DataAccessLayer();
    DataTable Dt = new DataTable();

    SqlParameter[] param = new SqlParameter[1];
    param[0] = new SqlParameter("@ID", SqlDbType.VarChar, 50);
    param[0].Value = ID;

    Dt = DAL.SelectData("VerifyProductID", null);
    DAL.Close();

    return Dt;
}

Хранимая процедура SQL Server:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROC [dbo].[VerifyProductID]
    @ID VARCHAR(50)
AS
    SELECT * 
    FROM PRODUCTS 
    WHERE ID = @ID

Исключение:

System.Data.SqlClient.SqlException не был обработан кодом пользователя
HResult = -2146232060
Сообщение = процедура или функция "VerifyProductID" ожидает параметр "@ID", который не был предоставлен.
Источник =.Net SqlClient Data Provider
ErrorCode = -2146232060
Класс = 16
LineNumber = 0
Количество = 201
Процедура = VerifyProductID
Server =.\SQLEXPRESS
State = 4

Трассировки стека:
в System.Data.SqlClient.SqlConnection.OnError (исключение SqlException, логическое breakConnection, действие 1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean, Boolean callerHasConnectionLock asyncClose) в System.Data.SqlClient.TdsParser.TryRun(runBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader DATASTREAM, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean & dataReady) в System.Data.SqlClient.SqlDataReader. TryConsumeMetaData() в System.Data.SqlClient.SqlDataReader.get_MetaData() в System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, логическое returnStream, логическое асинхронное, Int32 тайм-аут, задача и задача, логическое asyncWrite, SqlDataReader ds) в System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, логический возвратный поток, метод String, системный вызов времени для поиска и прерывания, системный запрос на завершение выполнения для задачи) DATA поведение) в System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader (поведение CommandBehavior) в System.Data.Common.DbDataAdapter.FillInternal (набор данных DataSet, DataTable [] datatables, int32 startRecord, Int32 maxRecTable, String maxRecc, String maxRecc, String Команда IDbCommand, поведение CommandBehavior) в System.Data.Common.DbDataAdapter.Fill(DataTable [] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand команда, поведение CommandBehavior) в System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) в E_AND_M.DAL.DataAccessLayer.SelectData (строка хранимого_процедура, SqlParameter [] param) в c:\Users\kh\Documents\Visual Studio 2012\Проекты\E_AND_M\E_AND_M\DAL\DataAccessLayer.cs: строка 58 в E_AND_M.BL.CLS_PRODUCTS.VarifyProductID (идентификатор строки) в c:\Users\kh\Documents\Visual Studio 2012\Проекты\E_AND_M\E_AND_M\BL\CLS_PRODUC. cs: строка 49 в E_AND_M.PL.FRM_ADD_PROUDECT.txtRef_Validated (Отправитель объекта, EventArgs e) в c:\Users\kh\Documents\Visual Studio 2012\Projects\E_AND_M\E_AND_M\PL\FRM_ADD_PROUDECT.cs: строка 33 в системе. Windows.Forms.Control.OnValidated(EventArgs e) в System.Windows.Forms.Control.PerformControlValidation(Boolean bulkValidation) в System.Windows.Forms.ContainerControl.ValidateThroughAncestor (Управляющий элемент ancestorControl, BooleanExceptionCorror: предотвращение фокуса)

  • 0
    Опечатка оповещения: это проверять, а не «менять» ....
Теги:
sql-server
stored-procedures

1 ответ

1
Лучший ответ
Dt = DAL.SelectData("VarifyProductID", null);

должно быть

Dt = DAL.SelectData("VarifyProductID", param);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню