我正在开发的应用程序是一个快速简便的工具,可以将数据导入我们的主应用程序。因此,用户加载CSV
,稍微插入数据并将其推送到数据库。
在将数据推送到数据库之前,我进行了验证检查,基本上说,"数据库中是否存在具有相同名称,帐户和排序代码的客户?如果是这样,将他们的guid(已知)已经放入列表中。"
问题是,结果变量总是0;尽管我的数据库中已存在重复的测试数据,但应该显示结果。除此之外,使用SQL Profiler
,我无法看到实际对数据库执行的查询。
我确定ExecuteScalar()
是我应该做的,所以我的注意力来自参数我添加到SqlCommand ......但是我会被打击如果我能算出来......有什么想法吗?
string connectionString = Generic.GetConnectionString("myDatabase");
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
SqlCommand check = new SqlCommand("select COUNT(*) from Customers C1 INNER JOIN CustomerBank B1 ON C1.Id = B1.CustomerId WHERE C1.Name = @Name AND B1.SortCode = @SortCode AND B1.AccountNumber = @AccountNumber", conn);
foreach (DataRow row in importedData.Rows)
{
check.Parameters.Clear();
check.Parameters.Add("@Name", SqlDbType.NVarChar).Value = row["Name"].ToString();
check.Parameters.Add("@SortCode", SqlDbType.NVarChar).Value = row["SortCode"].ToString();
check.Parameters.Add("@AccountNumber", SqlDbType.NVarChar).Value = row["AccountNumber"].ToString();
Object result = check.ExecuteScalar();
int count = (Int32)result;
if (count > 0)
{
DuplicateData.Add((Guid)row["BureauCustomerId"]);
}
}
}
澄清:importedData
是此DataTable
应用程序中保存的用户数据的C#
。在ForEach
循环期间,每行都有不同的列,其中一些列为Name
,SortCode
和AccountNumber
。值似乎在参数中设置(但现在将验证)。