2012-07-01 5 views
1

enter image description hereJunction Table, Insert и выберите

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

Например, чтобы добавить новую категорию я делаю следующее:

public int Insert() 
{ 
    string sqlString = "INSERT INTO Categories (name, image) VALUES (@Name, @Image);"; 
    SqlConnection sqlConnection = new 
     SqlConnection(ConfigurationManager.ConnectionStrings["OahuDB"].ConnectionString); 
    SqlCommand sqlCommand = new SqlCommand(sqlString, sqlConnection); 
    sqlCommand.Parameters.AddWithValue("@Name", this.Name); 
    sqlCommand.Parameters.AddWithValue("@Image", this.Image); 
    sqlConnection.Open(); 
    int x = sqlCommand.ExecuteNonQuery(); 
    sqlConnection.Close(); 
    sqlConnection.Dispose(); 
    return x; 
} 

Но как я должен вставить отношения между двумя таблицами, а затем получить данные на основе таблицы соединения?

Если вы могли бы привести примеры и хорошие учебные пособия по этому вопросу или если бы вы могли немного разработать. Спасибо большое.

+0

Почему вы не используете хранимые процедуры и вызываете их через C#. [Здесь] (http://stackoverflow.com/questions/5762942/stored-procedure-to-insert-two-tables-with-relationship) является примером и больше узнать о таблицах соединений, пожалуйста, обратитесь к [this] (http : //megocode3.wordpress.com/2008/01/04/understanding-a-sql-junction-table/) –

ответ

1

Отправить SQL как это:

INSERT INTO Categories (name, image) VALUES (@Name, @Image); 
SELECT scope_identity() as NewCategoryId; 

Это возвращает идентификатор вновь добавленной категории как набор строк. Вы можете получить новый идентификатор, используя знакомый ExecuteReader():

using (var read = sqlCommand.ExecuteReader()) 
{ 
    read.Read(); 
    int newCategoryId = (int) read["NewCategoryId"]; 
} 

Или еще короче с ExecuteScalar():

int newId = (int)sqlCommand.ExecuteScalar(); 

И, кстати, считают оберточной соединение в using:

using (var sqlConnection = new SqlConnection("...connection string...") 
{ 
    sqlConnection.Open(); 
    var sqlCommand = sqlConnection.CreateCommand(); 
    ... 
} 

Это помогает защитить от утечек соединений. Всегда возможно, что один из методов Execute генерирует исключение, будь то тайм-аут или проблема с сетью.

+0

Итак, после получения идентификатора i я снова вставлю в таблицу соединений? – user1027620

+0

Да, и если вам нужна новая страна, конечно, вам придется вставить этот первый – Andomar