2013-11-16 3 views
0

Я создал форму Main с запросом пароля для входа в следующую форму, зависит от имени пользователя. Теперь я сделал другую форму с вкладками. Одна вкладка для вставки данных, другая для проверки данных.Ошибка при открытии соединения при попытке вставить данные в базу данных SQL Server

У меня есть создать форму, как этот Picture

Это мой код:

`

namespace Kartice 
{ 
    public partial class Matjaz : Form 
    { 
    // string KarticaMString = "Data Source=hostname;Initial Catalog=mydatabase;uid=uid;pwd=pwd;Integrated Security=True;"; 
     // SqlConnection KarticaM = new SqlConnection(); 
     public Matjaz() 
     { 
      InitializeComponent(); 
     } 

    private void karticaMBindingNavigatorSaveItem_Click(object sender, EventArgs e) 
    { 
    } 

    private void usersBindingNavigatorSaveItem_Click(object sender, EventArgs e) 
    { 
    } 

    private void usersBindingNavigatorSaveItem_Click_1(object sender, EventArgs e) 
    { 
    } 

    private void karticaMBindingNavigatorSaveItem_Click_1(object sender, EventArgs e) 
    { 
    } 

    private void Matjaz_Load(object sender, EventArgs e) 
    { 
     // TODO: This line of code loads data into the 'kartice1.KarticaM' table. You can move, or remove it, as needed. 
     this.karticaMTableAdapter.Fill(this.kartice1.KarticaM); 

    } 

    private void tabPage1_Click(object sender, EventArgs e) 
    { 

    } 

    private void ExitBtn_Click(object sender, EventArgs e) 
    { 
     Application.Exit(); 

    } 

    private void InsertBtn_Click(object sender, EventArgs e) 
    { 
     string Sqlquery = null; 
     string KarticaMString = null; 

     using (SqlConnection conn = new SqlConnection(KarticaMString)) 
     { 
      { 
       Sqlquery = "INSERT INTO KarticaM (DateInsert, DateTransaction, Value, Purpose, DepositLift) VALUES (" + DateInsertPicker.Value + "," + DateTransactionPicker.Value + "," + ValueTxt.Text + "," + PurposeTxt.Text + "," + DepositLiftCombobox.SelectedText + ")"; 
       conn.Open(); 
       using (SqlCommand cmd = new SqlCommand(Sqlquery, conn)) 
       { 
        cmd.Parameters.Add("@DateInsert", SqlDbType.DateTime).Value = DateInsertPicker.Value; 
        cmd.Parameters.Add("@DateTransaction", SqlDbType.DateTime).Value = DateTransactionPicker.Value; 
        cmd.Parameters.Add("@Value", SqlDbType.Money).Value = ValueTxt.Text; 
        cmd.Parameters.Add("@Purpose", SqlDbType.Text).Value = PurposeTxt.Text; 
        cmd.Parameters.Add("DepositLift", SqlDbType.Text).Value = DepositLiftCombobox.SelectedValue; 

        cmd.ExecuteNonQuery(); 
        cmd.Connection = conn; 
       } 
       conn.Close(); 
      } 
     } 

    } 
    } 
} 

Я получил эту ошибку :(Error

+0

Что имеется в KaricaMString? , но вы используете commandParameters, но в SqlQuery не используйте его ... – Davecz

+0

Что неясно о сообщении? Строка подключения не установлена. – usr

ответ

3

Хотя ваша основную или первую проблема is ConnectionString is null, я также могу найти другие ошибки из вашего кода:

1.ConnectionString является null.

string KarticaMString = null;//assign your connection string here  
using (SqlConnection conn = new SqlConnection(KarticaMString)) 

Решение:

назначить правильное Connection String перед назначением его на SqlConnection объекта.

Пример:

string KarticaMString = "Data Source=hostname;Initial 
Catalog=mydatabase;uid=uid;pwd=pwd;Integrated Security=True"; 

2. ваше Insert Into Заявление может быть атакован с помощью SQL Injection.
Используйте Parametrised Queries.

3. если вы назначаете параметры с помощью SqlCommand.Parameters.AddWithValue() они не будут отражены в вашу sql statement неда, если не указать эти параметры в операторе SQL.

Решение: первым добавить параметры в insert into заявления затем добавить значения соответствующих параметров с помощью SqlCommand.Parameters.AddWithValue() заявления.

4. Вы назначаете объект SqlConnection после вызова заявления ExecuteNonQuery(). Не требуется, как вы уже делали это раньше.

5.предложение: то, что я чувствую, что вам не нужно, чтобы закрыть SqlConnection объект явно, как вы объявили его внутри using{} блока, объект утилизации willbe позабоченной с помощью блока Решения: Удалить заявление conn.Close();

Окончательное решение

private void InsertBtn_Click(object sender, EventArgs e) 
    { 
     string Sqlquery = null; 
     string KarticaMString = "@Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Bojan\Desktop\Programiranje\School‌​\Kartice\Kartice\Kartice.mdf;Integrated Security=True;User Instance=True"; 

     using (SqlConnection conn = new SqlConnection(KarticaMString)) 
     { 

       Sqlquery = "INSERT INTO KarticaM (DateInsert, DateTransaction, Value, Purpose, DepositLift) VALUES (@DateInsert,@DateTransaction,@Value,@Purpose,@DepositLift)"; 
       conn.Open(); 
       using (SqlCommand cmd = new SqlCommand(Sqlquery, conn)) 
       { 
        cmd.Parameters.Add("@DateInsert", SqlDbType.DateTime).Value = DateInsertPicker.Value; 
        cmd.Parameters.Add("@DateTransaction", SqlDbType.DateTime).Value = DateTransactionPicker.Value; 
        cmd.Parameters.Add("@Value", SqlDbType.Money).Value = ValueTxt.Text; 
        cmd.Parameters.Add("@Purpose", SqlDbType.Text).Value = PurposeTxt.Text; 
        cmd.Parameters.Add("@DepositLift", SqlDbType.Text).Value = DepositLiftCombobox.SelectedValue; 

        cmd.ExecuteNonQuery();      
       } 


     } 

    } 
+0

public partial class Matjaz: Form { public string KarticaMString = @ "Источник данных =. \ SQLEXPRESS; AttachDbFilename = C: \ Users \ Bojan \ Desktop \ Programiranje \ School \ Kartice \ Kartice \ Kartice.mdf; Integrated Security = True ; Пользовательский экземпляр = True "; SqlConnection KarticaM = новый SqlConnection(); ' У меня есть первые строки, как это, не знают, как поместить их в коде – Peca

+0

просто ждать я буду редактировать свой ответ :) –

+0

Пожалуйста, проверьте мой отредактированный ответ –

2

Обратите внимание это:

string KarticaMString = null; 

using (SqlConnection conn = new SqlConnection(KarticaMString)) 
{ 
    ... 
} 

Строка подключения KarticaMString, очевидно, null. Вы должны будете указать допустимую строку соединения для конструктора SqlConnection. См. ConnectionString для получения дополнительной информации о том, как писать допустимую строку подключения или использовать SqlConnectionStringBuilder.

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