希望有人可以帮助解决这个问题
我试图将一行数据插入表[问题]然后立即从问题的ID列中获取Guid,这样它就可以插入到另一个表中的Actions中,在两者之间创建一个链接。关系是[问题]一对多[行动]。
当我运行此代码时,它会导致Specified Cast无效错误: Guid lastID =(Guid)sel.ExecuteScalar();
lastID是我想要分配最后创建的Guid的变量,因此可以将其传递到表操作的另一个表INSERT。
如果有人能提供帮助那就太棒了!感谢
我正在使用C#2010 Express
//This is declared at the top of the form
public Guid lastID;
private void pbSaveIssue_Click(object sender, EventArgs e)
{
SqlCeConnection ArcBaseConn = new SqlCeConnection(@"Data Source=|DataDirectory|\ArcBase.sdf");
try
{
string cmdIssueSubmit = "INSERT INTO Issues (Type,Description,Dateraised,Site,Reportedby,Status) VALUES (@Type,@Description,@Dateraised,@Site,@Reportedby,@Status)";
string TypeSubmit = cbIssueType.Text;
string DescriptionSubmit = rtbDescription.Text;
string SiteSubmit = cbIssueSite.Text;
string ReportedbySubmit = cbReportedBy.Text;
string DateraisedSubmit = dtpDateRaised.Text;
SqlCeCommand sel = new SqlCeCommand();
sel.Connection = ArcBaseConn;
sel.CommandType = CommandType.Text;
sel.CommandText = cmdIssueSubmit;
sel.Parameters.AddWithValue("@Type", TypeSubmit);
sel.Parameters.AddWithValue("@Description", DescriptionSubmit);
sel.Parameters.AddWithValue("@Dateraised", DateraisedSubmit);
sel.Parameters.AddWithValue("@Site", SiteSubmit);
sel.Parameters.AddWithValue("@Reportedby", ReportedbySubmit);
sel.Parameters.AddWithValue("@Status", lbStatus.Text);
ArcBaseConn.Open();
sel.ExecuteNonQuery();
//Here is the problem
// Grab the last Unique ID for the Issue just entered and assign to a variable so that it can be entered with the Actions below.
string cmdGetlastID = "SELECT @@IDENTITY";
sel.CommandText=cmdGetlastID;
Guid lastID = (Guid)sel.ExecuteScalar();
ArcBaseConn.Close();
}
catch (SqlCeException ex)
{
MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
Application.ExitThread();
}
答案 0 :(得分:0)
假设您插入的表已定义了标识列,
tinyint
,smallint
,int
或bigint
),而不是Guid
,因此转换为{{1}将无法正常工作(正如您所发现的那样)。Guid
代替@@SCOPE_IDENTITY
,以免发现种族条件造成的痛苦。从代码的外观来看,你不是这样做的,而是......
如果您尝试获取定义为@@IDENTITY
的列的值(并且这样做,以便您没有竞争条件),则需要执行以下操作:
uniqueid
然后使用declare @my_guid uniqueid = newid()
INSERT Issues
(
Type ,
Description ,
Dateraised ,
Site ,
Reportedby ,
Status ,
Unique_Guid_Column
)
VALUES
(
@Type ,
@Description ,
@Dateraised ,
@Site ,
@Reportedby ,
@Status ,
@my_guid
)
select case @@ERROR when 0 then @myguid else null end
执行该操作。