Ошибка при вставке данных в базу данных сервера sql с использованием vb.net - PullRequest
0 голосов
/ 10 октября 2011

Я использую следующий код для вставки данных в таблицу и получаю сообщение об ошибке в cmd.executenonquery () .... Исключение помечено как исключение SQL, а в базовом сообщении указано «Строковые или двоичные данные».будет усечено. Оператор был прерван. "

        Dim str As String  ' defines str as a string variable

        'takes insertion query as a string in str variable
        str = "Insert into Instructors Values(@inst_id, @inst_name, @contact, @game, 'N/A', 'N/A', 'Available')"

        'defines a new command which takes query string and connection string as parameters
        Dim cmd As New SqlCommand(str, con)

        ' defines Instructor ID parameter and takes its value from the form 
        Dim prmInstID As New SqlParameter("@inst_id", SqlDbType.Int)
        prmInstID.Value = TxtInstID.Text

        ' defines Instructor Name parameter and takes its value from the form 
        Dim prmInstName As New SqlParameter("@inst_name", SqlDbType.Char)
        prmInstName.Value = TxtInstName.Text

        ' defines Contact parameter and takes its value from the form 
        Dim prmContact As New SqlParameter("@contact", SqlDbType.VarChar)
        prmContact.Value = MskdTxtCntctno.Text


        ' defines Specialty Game parameter and takes its value from the form 
        Dim prmGame As New SqlParameter("@game", SqlDbType.VarChar)
        prmGame.Value = Me.ComboBox1.SelectedItem

        cmd.Parameters.Add(prmInstID)
        cmd.Parameters.Add(prmInstName)
        cmd.Parameters.Add(prmContact)
        cmd.Parameters.Add(prmGame)


        cmd.ExecuteNonQuery()

        con.Close()

Ответы [ 3 ]

0 голосов
/ 31 октября 2011

Как сказал Акзен, сообщение об ошибке, вероятно, связано с тем, что вы пытаетесь вставить что-то слишком длинное, чтобы поместиться в одном из ваших полей.

Я просто подумал, что добавлю к этому несколько указателей, поскольку я предполагаю, что вы все еще учитесь и т. Д. Если вы используете хранимые процедуры, вы можете значительно сократить свой код, а также повысить эффективность своего приложения.

Хранимые процедуры дают вам несколько преимуществ, они более безопасны, так как вы не передаете запрос по сети (если кто-то перехватывает ваш запрос, он может получить информацию о структуре вашей таблицы). Также хранимые процедуры не нужно перекомпилировать каждый раз. они выполняются в отличие от передачи строки запроса, где сервер должен компилировать запрос каждый раз, когда он его получает. Кроме того, использование SP позволяет повторно использовать один и тот же запрос в нескольких местах без необходимости копировать и вставлять свою строку запроса.

Ниже я подхожу к написанию кода.

' Declare a new command
Dim cmd As New SqlCommand

' Set the type to Stored Proc and Tell it which connection to use
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = "spMySpNameGoesHERE"
cmd.Connection = con

' Add the parameter and its value
cmd.Parameters.AddWithValue("@ParamName",TxtInstID.Text ) 
' More Params go here

cmd.ExecuteNonQuery() 

con.Close() 


CREATE PROCEDURE spMySpNameGoesHERE
(
@inst_id INT,
@inst_name VARCHAR(50),
etc etc
)
AS
BEGIN

Insert into 
Instructors 
Values(@inst_id, @inst_name, @contact, @game, 'N/A', 'N/A', 'Available')        

END
0 голосов
/ 21 февраля 2013

Эта ошибка вызвана тем, что в одно или несколько полей вводится большее количество символов, чем размер столбцов таблицы БД.

например, если у вас есть столбец имени в таблице с типом и длиной данных VARCHER (10). Если вы введете более 10 символов в столбце имени, вы получите эту ошибку.

Решение: увеличить длину столбца. например, 25 или по вашему требованию. а также ограничить количество символов в вашем текстовом поле, сказав MaxLength="25", если это текстовое поле.

0 голосов
/ 31 октября 2011

Это исключение обычно возникает, когда текстовое поле в базе данных слишком мало для размещения данных, которые вы хотите вставить. Например, если поле имени инструктора в базе данных имеет длину 10 (символов), а текст из TxtInstName.Text содержит более 10 символов, вы получите эту ошибку.

Чтобы решить эту проблему, вы можете увеличить поле в базе данных или проверить в форме, что текст не слишком длинный.

...