使用SQL select语句来自Access数据库后台,我发现将数据推送到SQL Server数据库并更新记录涉及更多工作。我最初了解在SQL Server中添加记录需要一个包含INSERT命令的非常长的语句。这对我来说似乎是不必要的复杂,我不得不相信,今天使用.NET,它必须简单得多。
我已经研究并审核了DataTable
,DataSet
,SqlCommand
,SqlAdapters
等几个代码示例。尽管我的代码实际上没有任何代码示例它没有错误。我已经经历了这些例子中的这么多突变,我正在向Stack Overflow寻求帮助。
这就是我想要做的事情。
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);
}
答案 0 :(得分:4)
什么样的列是SerialNumber
?如果它是一个字符串列,你需要在参数周围添加引号 - 当你在它时,为了防止SQL注入攻击 - 使用参数化查询而不是将你的SQL语句连接在一起...... (作为额外的好处,参数将在需要时自动使用值周围的引号):
SqlCommand cmd = new SqlCommand("SELECT * FROM Dongles WHERE SerialNumber = @SerialNo", server.SQLConnection);
cmd.Parameters.Add("@SerialNo", SqlDbType.VarChar, 50).Value = m_dongle.SerialNumber.Trim();
SqlDataAdapter da = new SqlDataAdapter(cmd);
SqlCommandBuilder cb = new SqlCommandBuilder(da);
DataTable dt = new DataTable();
da.Fill(dt);
if (dt.Rows.Count > 0)
{
.......
}