【问题标题】:string to varchar C# / SQL Server字符串到 varchar C#/SQL Server
【发布时间】:2012-11-15 23:03:39
【问题描述】:

我有一个需要在列中存储值的应用程序。代码中值为字符串,列数据类型为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”列没有改变。这里有什么问题?

【问题讨论】:

  • When I check the database, the column "randomKey" - 我在数据库中没有看到更新代码,你是如何更新数据库的?
  • 您只是在您的DataTable 中更新DataRow(您的数据的所有内存中 表示形式) - 您还没有将它存储回数据库!
  • 没有行["randomKey"] = randomKeyString;更改该特定行的列值?
  • 它会更改 DataRow 中该列的值 - 在内存 (RAM) 中 - 但 NOT 在数据库表中。查看this basic ADO.NET tutorial 之类的内容,了解使用“原始”ADO.NET 访问数据库的基础知识

标签: c# sql sql-server datatable datarow


【解决方案1】:

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

foreach (...)
{
    // your code here
}
DataSet dataSet = new DataSet();
dataSet.Tables.Add(dt);
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.Update(dataSet);

【讨论】:

  • 您的解决方案出现以下错误:更新无法找到 TableMapping['Table'] 或 DataTable 'Table'。
  • @user1109363 好吧,由您在连接中创建DataAdapter,并以正确的方式呼叫他。
  • 对不起,我不太明白。
  • @user1109363 阅读 marc_s 提到的教程。之后 - 为您自己的数据库使用方法。
  • @user1109363 祝你的项目好运:)
【解决方案2】:

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

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

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

rnd = new Random(newSeed);

感谢 Mehrdad Afshari

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-27
      • 2017-12-08
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      • 2020-06-09
      相关资源
      最近更新 更多