1

我有一个应用程序需要在列中存储一个值。值是代码中的字符串,列数据类型是nvarchar.

foreach (DataRow row in dt.Rows)
{
    //Generate a random length for randomKey range between 3 and 6 characters
    Random randKey = new Random();
    int randKeyLength = randKey.Next(3, 6);

    //calculate randomKeyString
    String randomKeyString = md5Prepare.gen_randomKeyString(randKeyLength);

    //add randomKeyString to database
    row["randomKey"] = randomKeyString;
}

当我检查数据库时,“randomKey”列没有改变。这里有什么问题?

4

3 回答 3

1

您没有在DataRowor上调用任何 Commit 方法DataTable
您需要DataAdapterandDataSet来实际更新数据库。

foreach (...)
{
    // your code here
}
DataSet dataSet = new DataSet();
dataSet.Tables.Add(dt);
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.Update(dataSet);
于 2012-11-28T06:48:37.977 回答
0

您设置值的操作没有任何问题。字符串在 C# 中是 unicode,nvarchar 也是如此。您只需要将值写回/插入到数据库中,因为您目前正在做的是操纵您从数据库中读取的内存表示。

于 2012-11-28T06:46:06.447 回答
0

不要在 foreach 中创建 Random 对象的实例:而是在之前创建它。

单个 Random 实例生成的随机数序列应该是均匀分布的。通过快速连续地为每个随机数创建一个新的 Random 实例,您可能会为它们播种相同的值并让它们生成相同的随机数。当然,在这种情况下,生成的序列将远非均匀分布。

为了完整起见,如果您确实需要重新播种 Random,您将使用新种子创建 Random 的新实例:

rnd = new Random(newSeed);

感谢 Mehrdad Afshari

于 2012-11-28T06:46:16.120 回答