SQL查询ADO.NET后如何保存数据库?

时间:2013-07-26 17:54:21

标签: c# sql-server ado.net

我有与数据库的连接

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查询有效!)我如何解决这个问题?

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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 Read more about SCOPE_IDENTITY

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

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

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