1

ここに画像の説明を入力

私はこれを自分で学んでおり、新しいカテゴリと新しい国を挿入したいところまで来ましたが、正確にそれを行う方法がわかりません.

たとえば、新しいカテゴリを追加するには、次のようにします。

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;
}

しかし、両方のテーブル間にリレーションシップを挿入し、結合テーブルに基づいてデータを取得するにはどうすればよいでしょうか?

これに関する例と優れたチュートリアルを提供できる場合、または少し詳しく説明できる場合。どうもありがとう。

4

1 に答える 1

1

次のように SQL を送信します。

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

これにより、新しく追加されたカテゴリの ID が行セットとして返されます。おなじみの を使用して、新しい ID を取得できます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タイムアウトかネットワークの問題かに関係なく、いずれかのメソッドが例外をスローする可能性は常にあります。

于 2012-07-01T16:27:28.773 に答える