我有与数据库的连接
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
查询有效!)我如何解决这个问题?
答案 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
来检索日期。