2014-02-08 3 views
0

Я создаю проект курьерской службы. Я получил эту ошибку, когда попытался ввести значения во время выполнения. У меня есть 2 оператора вставки, один для отправителя и другой для получателя. Но проблема существует в инструкции insert для Sender и в LoginID. Фактически, я хочу добавить зарегистрированного пользователя в таблицу «Отправитель», чтобы я мог видеть, сколько записей регистрировал пользователь. Во-первых, я получаю LoginID из таблицы «Вход», используя это заявлениеINSERT Satatement Confliceted with FOREIGN KEY Contraint

log_id = Convert.ToInt32(dt.Rows[0][0]); 

Где log_id - целочисленная переменная. И dt - это имя таблицы данных

Это работает отлично. Я видел это с помощью сообщений.

И затем я создал публичную переменную, чтобы использовать ее в других формах.

public int logId 
{ 
    get { return log_id; } 
} 

Затем я назвал эту переменную в своей форме ввода данных следующим образом.

public StdExpIntl(int logId) 
{ 
    InitializeComponent(); 
    logID = logId; 
} 

И это мой Вставить заявление

Insert into Sender(CourierNo,LoginID,SenderName) values ('" + cNo.Text + "','"+logID+"', '" + Name1.Text + "')", con); 

Это не полное заявление, но я предполагаю, что это нормально сейчас.

Войти стол

LoginID numeric(18, 0) NOT NULL 
StaffID varchar(15) NOT NULL 
username varchar(10) NOT NULL 
password varchar(10) NOT NULL 

Sender Таблица

CourierNo varchar(15) NOT NULL 
LoginID numeric(18, 0) NOT NULL 
SenderName text NOT NULL 
SenderNIC numeric(18, 0) NOT NULL 
SenderCountry text NOT NULL 
SenderState text NOT NULL 

Ошибка в LoginID, пожалуйста, кто-то помочь мне.

+0

Используйте параметры, это ваша большая проблема. –

+0

Не могли бы вы объяснить – Aroona

+0

Также я не вижу причины, по которой вы вставляете первичный ключ, если у вас есть автоинкремент или сгенерированный – meda

ответ

-1

Попробуйте

Insert into Sender(CourierNo,LoginID,SenderName) values 
('" + cNo.Text + "'," + logID + ", '" + Name1.Text + "')", con); 

я удалил одинарные кавычки вокруг LOGID

+0

Это дает мне ошибку Неправильный синтаксис Рядом с ','. – Aroona

0

Вы установка переменной себе.

public StdExpIntl(int logId) 
    { 
     InitializeComponent(); 
     logID = logId; 
    } 

Вы хотите ...

public StdExpIntl(int logId) 
    { 
     InitializeComponent(); 
     log_id = logId; 
    } 
+0

Но он отлично подходит для других форм. – Aroona

+0

Кроме того, logID - это локальная переменная StdExpIntl, а logId - импортированная переменная, есть разница. – Aroona

1

я вижу следующее: оператор вставки использует единственную цитату вокруг каждого параметра для вставки, в том числе LOGID. Поскольку LogID является числовым, то не нужно было бы это, так что ваша вставка заявление должно выглядеть следующим образом:

Insert into Sender(CourierNo,LoginID,SenderName) values ('" + cNo.Text + "',"+logID+", '" + Name1.Text + "'); 

для предотвращения микро-управлений вашими запросами таким образом, вы можете использовать параметризации запросов.

using (SqlConnection connection = new SqlConnection(ConnectionString)) 
{ 
    using (SqlCommand command = new SqlCommand("Insert into Sender(CourierNo,LoginID,SenderName) values (@courierNo, @loginId, @senderName)",connection)) 
    { 

     command.Parameters.Add(new SqlParameter("courierNo", cNo.Text)); 
     command.Parameters.Add(new SqlParameter("loginId", logID)); 
     command.Parameters.Add(new SqlParameter("senderName", Name1.Text)); 
     connection.Open(); 
     command.ExecuteNonQuery(); 
     connection.Close(); 
    } 
} 
+0

Вам нужно включить '@' в имена новых SqlParameter и, возможно, захотите добавить '.Value = something' в ваш' Parameters.Add() 's. –

+0

@Dour High Arch: Это то, что вы говорите, более общую реализацию? Как бы то ни было, он должен работать на сервере sql, за исключением того, что я забыл добавить объект соединения в конструкцию sqlcommand, которую я теперь добавил. – martijn

+0

Я имел в виду использование 'SqlParameter' с [типом данных] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter%28v=vs.110%29.aspx), как' command.Parameters.Add ( "@courierNo", SqlDbType.VarChar) .Value = cNo.Text'. –