0

嗨,我正在编写 ac# 控制台应用程序以将数据从一个数据库迁移到另一个数据库。数据库的行中有图像,我需要使用 @param 将这些图像包含到 SQL 语句中,并使用 ADO.NET 我正在执行这些语句。

我需要生成可用作@param 名称的随机字符串,我正在做这样的事情。

    While(blah blah)
    {
    if (bVisitorPhoto != null)
            {
                string Picture = RandomString();
                SqlParameter picparameter = new SqlParameter();
                picparameter.SqlDbType = SqlDbType.Image;
                picparameter.ParameterName = Picture;
                picparameter.Value = bVisitorPhoto;
                command.Parameters.Add(picparameter);
                VisitorPhoto = "@"+Picture;
             }
         string query = "insert into table Values (Picture, "PersonName");       
    }

 public static string RandomString()
    {
        Random rand = new Random();
        string Random_String = "str" + rand.Next(9999999).ToString();
        return Random_String;
    }

问题是这个错误

"SqlClient.SqlException" 变量名 '@str5440049' 已被声明。



这是怎么回事???但是,一旦我按 F11 像一百万次一样在调试模式下运行程序,我就会面临这个错误

4

2 回答 2

5

为什么使用随机而不只是列名+计数器值?

int counter=0;
While(blah blah)
{
  if (bVisitorPhoto != null)
  {
    string Picture = photo+counter.ToString();
    SqlParameter picparameter = new SqlParameter();
    picparameter.SqlDbType = SqlDbType.Image;
    picparameter.ParameterName = Picture;
    picparameter.Value = bVisitorPhoto;
    command.Parameters.Add(picparameter);
    VisitorPhoto = "@"+Picture;
  }
  string query = "insert into table Values (Picture, "PersonName");       
  counter++;
}
于 2013-06-03T10:33:39.633 回答
3

您不应该Random为每个方法调用创建一个新对象。相反,创建一次,并将其存储在成员变量中:

private static readonly Random _rand = new Random();

public static string RandomString()
{
    return "str" + _rand.Next(9999999).ToString();
}

作为更详细的解释,Random.Random()构造函数使用与时间相关的默认种子值。如果多个构造函数调用之间没有足够的时间,则种子值将相同。如果你从一个相同的种子开始,生成的数字序列总是相同的。

于 2013-06-03T10:31:07.017 回答