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

另外,请注意,在我们使用的 CommandText 中,SCOPE_IDENTITY它返回刚刚插入的行的ID 。阅读更多关于 SCOPE_IDENTITY的信息。

我不确定您是否需要检索 Departments 表的所有详细信息,如果是,请坚持上述解决方案。如果您只关心新添加记录的日期,那么您可以考虑返回日期而不是 ID。声明看起来像这样:

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

上述声明将仅使用您的声明返回您的日期Insert。您无需编写另一个Select来检索Date

于 2013-07-26T18:06:46.257 回答