1

string filename = Path.GetFileName(item);パラメータ化されたクエリ ループを使用して変数内の 1 つのファイル名を何度も取得すると、このコードに問題があります。

 string[] filePaths = Directory.GetFiles(Server.MapPath("~/Gallery/GalleryImage/" + newtable));


    int a = 0;

    OleDbCommand cmd = new OleDbCommand();

    OleDbConnection mycon = new OleDbConnection();

    mycon.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\AGENTJ.AGENTJ-PC\Documents\Visual Studio 2010\WebSites\mfaridalam\App_Data\mfaridalam1.accdb";

    cmd = mycon.CreateCommand();

    mycon.Open();

    DateTime dateTime = DateTime.UtcNow.Date;
    foreach (string item in filePaths)
    {
        a++;
        string filename = Path.GetFileName(item);
        string ips = "00" + a.ToString();

       // Response.Write("Number (" + a.ToString() + ")    " + filename + "    " + ips + "    " + t1 + "     " + v + "     " + some + "   " + some + "<br/><br/>");

       // cmd.CommandText = "INSERT INTO [Image] ([Image],[Sort],[Created],[Albumid],[Description],[title])VALUES('" + filename + "','" + ips + "','" + dateTime.ToString("dd/MM/yyyy") + "','" + newtable + "','" + TextBox4.Text + "','" + TextBox3.Text + "')";
        cmd.CommandText = "INSERT INTO [Image] ([Image],[Sort],[Created],[Albumid],[Description],[title])VALUES (?,?,?,?,?,?)";
        cmd.Parameters.AddWithValue("@p1", filename);
        cmd.Parameters.AddWithValue("@p2", ips);
        cmd.Parameters.AddWithValue("@p3", dateTime.ToString("dd/MM/yyyy"));
        cmd.Parameters.AddWithValue("@p4", newtable);
        cmd.Parameters.AddWithValue("@p5", TextBox4.Text);
        cmd.Parameters.AddWithValue("@p6", TextBox3.Text);
        cmd.ExecuteNonQuery();
    }

しかし、通常の挿入クエリを使用すると

     cmd.CommandText = "INSERT INTO [Image] ([Image],[Sort],[Created],[Albumid],[Description],[title])VALUES('" + filename + "','" + ips + "','" + dateTime.ToString("dd/MM/yyyy") + "','" + newtable + "','" + TextBox4.Text + "','" + TextBox3.Text + "')";

ループは正常に機能し、特定の場所にあるファイルのすべての名前を取得します。理由を教えてください。私のロジックに問題はありますか?

4

1 に答える 1