2013-03-06 1 views
0

Я искал свой вопрос здесь, но я не смог его найти. Я использую Microsoft VS 2010 C#.ExecuteNonQuery: свойство подключения не было инициализировано

Вот мой код:

private OleDbConnection myCon; 
public Form5() 
{ 
    myCon = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|ForeignWorkerinfo.accdb"); 
    InitializeComponent(); 
} 

private void Form5_Load(object sender, EventArgs e) 
{ 
    // TODO: This line of code loads data into the 'foreignWorkerinfoDataSet.FWinFO' table. You can move, or remove it, as needed. 
    this.fWinFOTableAdapter.Fill(this.foreignWorkerinfoDataSet.FWinFO); 
} 

private void button1_Click(object sender, EventArgs e) 
{     
    OleDbCommand cmd = new OleDbCommand(); 
    cmd.Connection = myCon; 
    cmd = new OleDbCommand("INSERT INTO [FWinFO] ([ID], [Name], [Gender], [Date of Birth], [Country], [Date of Expire], [Passport No], [Working Place]) VALUES (?, ?, ?, ?, ?, ?, ?, ?);"); 

    cmd.Parameters.AddWithValue("@id", textBox8.Text); 
    cmd.Parameters.AddWithValue("@name", textBox1.Text); 
    cmd.Parameters.AddWithValue("@gender", textBox2.Text); 
    cmd.Parameters.AddWithValue("@dob", dateTimePicker1.Value); 
    cmd.Parameters.AddWithValue("@country", textBox4.Text); 
    cmd.Parameters.AddWithValue("@doe", dateTimePicker2.Value); 
    cmd.Parameters.AddWithValue("@passport", textBox6.Text); 
    cmd.Parameters.AddWithValue("@workplace", textBox7.Text); 

    cmd.ExecuteNonQuery(); 
    myCon.Close(); 
} 

Может кто-нибудь сказать мне, почему свойство соединения не инициализирована?

+1

Какая конкретная ошибка вы видите? Блок 'try/catch' был бы полезен ... – Brian

+0

Вышла та же проблема :( –

ответ

1

Попробуйте открыть соединение первых, с myCon.Open()

+0

Проблема решена :) –

+0

@ThamJunKai Просто из любопытства, я думал, что это не сработало? Не пытаться отнять у другого, если это правильно, но вы хотели дать мне галочку. Это просто ошибка и наше обсуждение, я считаю, что моя - это то, что решило проблему? Если нет, просто проигнорируйте это –

3

У вас есть две ошибки, то один вы утверждаете, и один, что будет происходить после того, как вы фиксируете первый:

Первый является то, что вы переписав установку Connection собственности на cmd по телефону новый еще раз. Либо сделайте одно новое, либо установите свойство текста запроса.

Следующая ошибка:

Вы должны вызвать myCon.Open сделать ExecuteNonQuery() вызов. Вы не можете выполнить запрос по нераскрытому соединению.

Вы всегда можете проверить, открыто ли соединение, проверив его State, чтобы узнать, есть ли он Open.

Однако я бы предложил создать соединение по требованию, но это зависит от кода. Использование глобального, общего объекта подключения остается открытым для проблем. Однако вы можете кэшировать строку соединения.

+0

добавил myCon.Open, но все равно вышла та же ошибка –

+0

@ThamJunKai Как и предлагалось, попробуйте переместить myCon = new OleDbConnection («Provider = Microsoft.ACE.OLEDB.12.0; Источник данных = | DataDirectory | ForeignWorkerinfo.accdb»); 'после' InitializeComponent' Может быть, это перезапись вашей инициализации –

+0

Сэр, все еще не работает, и я попробовал метод try catch –

1
OleDbCommand cmd = new OleDbCommand(); 
cmd.Connection = myCon; 
cmd = new OleDbCommand("INSERT INTO [FWinFO] ([ID], [Name], [Gender], [Date of Birth], [Country], [Date of Expire], [Passport No], [Working Place]) VALUES (?, ?, ?, ?, ?, ?, ?, ?);"); 

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

OleDbCommand cmd = new OleDbCommand(); 
cmd.Connection = myCon; 
myCon.Open(); 
cmd = new OleDbCommand("INSERT INTO [FWinFO] ([ID], [Name], [Gender], [Date of Birth], [Country], [Date of Expire], [Passport No], [Working Place]) VALUES (?, ?, ?, ?, ?, ?, ?, ?);"); 
+0

Привет, я выполнил ваш код, но все равно не работает. ExecuteNonQuery: свойство Connection не было инициализировано. –

+0

@ThamJunKai - Есть несколько проблем с вашим кодом, как я упоминал ранее. Во-первых, у вас нет «ConnectionObject» для работы, и, во-вторых, ваши «ParameterObjects» не будут работать с тем, как вы их объявили. О, и где вы создаете свой «SqlDataAdapter»? Позвольте мне отредактировать мой ответ и посмотреть, поможет ли это вам ... – Brian

 Смежные вопросы

  • Нет связанных вопросов^_^