1

データベースに接続しています

public SqlConnection CreateConnection()
{
    var con = new SqlConnection(s_connection);
    con.Open();
    return con;
}

INSERTこの接続の後にクエリがあります。

SqlCommand myCommand = CreateConnection().CreateCommand();
myCommand.CommandText = "INSERT INTO Departments(Name, Phone) VALUES (@Name, @Phone);";
myCommand.Parameters.Add("@Name", SqlDbType.NVarChar, 20);
myCommand.Parameters["@Name"].Value = d.Name;
myCommand.Parameters.Add("@Phone", SqlDbType.NVarChar, 20);
myCommand.Parameters["@Phone"].Value = d.Phone;
myCommand.ExecuteNonQuery();

クエリを使用してデータベースから日付を取得したいのですがSELECT、クエリの後に追加された新しいデータを取得できません。プログラムをリセットすると、すべてのデータが表示されます (INSERTクエリが機能します!) この問題を解決するにはどうすればよいですか?

4

2 に答える 2

1

ExecuteScalar() 関数を使用できます

static public int AddProductCategory(string newName, string connString)
{
 Int32 newProdID = 0;
string sql =
    "INSERT INTO Production.ProductCategory (Name) VALUES (@Name); "
    + "SELECT CAST(scope_identity() AS int)";
using (SqlConnection conn = new SqlConnection(connString))
{
    SqlCommand cmd = new SqlCommand(sql, conn);
    cmd.Parameters.Add("@Name", SqlDbType.VarChar);
    cmd.Parameters["@name"].Value = newName;
    try
    {
        conn.Open();
        newProdID = (Int32)cmd.ExecuteScalar();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}
return (int)newProdID;
}
于 2013-07-26T18:42:14.480 に答える
0

まず、INSERT発言を改める必要があります。新しく挿入された行のIDを返す必要があります。

Int NewID = 0;
SqlCommand myCommand = CreateConnection().CreateCommand();
myCommand.CommandText = "INSERT INTO Departments (Name, Phone) VALUES (@Name, @Phone) SELECT SCOPE_IDENTITY()";
myCommand.Parameters.Add("@Name", SqlDbType.NVarChar, 20);
myCommand.Parameters["@Name"].Value = d.Name;
myCommand.Parameters.Add("@Phone", SqlDbType.NVarChar, 20);
myCommand.Parameters["@Phone"].Value = d.Phone;

// We will use ExecuteScalar that will return the ID of newly inserted row instead of ExecuteNonQuery
NewID = myCommand.ExecuteScalar();

これで、NewId を使用してデータを取得できます。General ステートメントは次のようになります。

Select DateColumn From Deprtments Where IdColumn = NewId

また、挿入したばかりの行のIDSCOPE_IDENTITYを返すCommandText を使用していることにも注意してください。SCOPE_IDENTITY の詳細を参照してください

Departments テーブルのすべての詳細を取得する必要があるかどうかはわかりません。必要な場合は、上記の解決策に従ってください。新しく追加されたレコードの Date だけを気にする場合は、ID の代わりに Date を返すことを検討できます。ステートメントは次のようになります。

INSERT INTO Departments (Name, Phone) VALUES (@Name, @Phone) SELECT DateCol From Department Where IdCol = SCOPE_IDENTITY()

上記のステートメントは、ステートメントのみを使用して日付を返します。Dateを取得するInsertために別のコードを記述する必要はありません。Select

于 2013-07-26T18:06:46.257 に答える