使用SQL select语句从Access数据库背景中发现,我发现在将数据推送到SQL Server数据库和更新记录方面涉及更多工作。我最初在SQL Server中添加记录的理解需要包含INSERT命令的VERY LONG语句。这对我来说似乎是不必要的复杂,我必须相信,今天使用.NET,它必须更简单。无法添加或更新简单的行到SQL Server表
我已经研究和审查的几个代码示例DataTable
,DataSet
,SqlCommand
,SqlAdapters
,等他们都没有,尽管我的代码中没有任何错误的情况为我工作。我已经经历了这些例子的很多突变,以致我对Stack Overflow有所帮助。
这是我正在做的。
- 连接到SQL Server外部托管(作品!)
- 打开一个表叫
Dongles
。 - 使用序列号作为标准检查一行。
- 如果存在,更新记录。
- 如果不是,则添加新记录。
我提供了我已经使用的代码示例的最新变体。在运行代码之前,我手动将1条记录添加到数据库,以便我知道SerialNumber参数匹配。不幸的是,if (dt.Rows.Count > 0)
语句返回false,并且从不尝试更新。
现在我会告诉你这个....我尝试了其他的突变,成功地通过更新每个字段的行。但是,当Update()函数被调用(成功)时,什么都没有传播到实际的数据库。
下面的代码:
SqlCommand cmd = new SqlCommand("SELECT * FROM Dongles WHERE SerialNumber = " + m_dongle.SerialNumber, server.SQLConnection);
SqlDataAdapter da = new SqlDataAdapter(cmd);
SqlCommandBuilder cb = new SqlCommandBuilder(da);
DataTable dt = new DataTable();
da.Fill(dt);
if (dt.Rows.Count > 0)
{
dt.Rows[0]["IsLeased"] = m_dongle.IsLeased == true ? 1 : 0;
dt.Rows[0]["LeaseDaysRemaining"] = m_dongle.LeaseDaysRemaining;
dt.Rows[0]["DateAssigned"] = DateTime.Now;
dt.Rows[0]["ConfiguredBy"] = m_dongle.ConfiguredBy;
dt.Rows[0]["LicenseHolder"] = m_dongle.LicenseHolder;
dt.Rows[0]["ContactName"] = m_dongle.ContactName;
dt.Rows[0]["ContactPhone"] = m_dongle.ContactPhone;
dt.Rows[0]["ContactEmail"] = m_dongle.ContactEmail;
dt.Rows[0]["SerialNumber"] = m_dongle.SerialNumber;
dt.Rows[0]["IsNetworkDongle"] = m_dongle.IsNetworkDongle;
dt.Rows[0]["NetworkMaxUsers"] = m_dongle.NetworkMaxUsers;
dt.Rows[0]["NetworkAbsoluteMaxUsers"] = m_dongle.NetworkAbsoluteMaxUsers;
dt.Rows[0]["IsAssigned"] = m_dongle.IsAssigned;
dt.Rows[0]["DongleModel"] = m_dongle.DongleModel;
dt.Rows[0]["SalesforceID"] = m_dongle.SalesforceID;
da.Update(dt);
MessageBox.Show("Dongle profile updated successfully.", "Profile Saved",
MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
如果ado.net与数据表是太复杂了,你,你可以查一些ORM与例如实体框架工具,如果你喜欢一些神奇:) –
嗨JD,**接受答案,请点击答案左边的复选框大纲**。人们会欣赏这一点,并将在未来更愿意提供帮助。和其他许多人一样,我确实为你提供了解决方案,但不会因为你没有回报而给它......抱歉 –
尝试不使用where语句作为完整性检查。 –