【问题标题】:C# Error - Argument Exception was UnhandledC# 错误 - 参数异常未处理
【发布时间】:2015-03-13 19:26:16
【问题描述】:

我正在编写一个患者预约应用程序,当我单击按钮时,它应该在第 1 列下的 Access 文件中添加 365 天(从今天开始)。

现在,它以前可以工作,但现在它给了我一个错误。

System.Data.dll 中出现“System.ArgumentException”类型的未处理异常

附加信息:初始化字符串的格式不符合从索引 34 开始的规范。

代码:

private void button3_Click(object sender, EventArgs e)
{
        DateTime a = dateTimePicker1.Value.Date;
  HERE-> System.Data.OleDb.OleDbConnection conn = new
System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data
SourceC:\Users\Kolton\Desktop\Doctor App\Database1.accdb"); <- TO HERE

        conn.Open();

        for (int i = 0; i < 366; i++)
        {
            DateTime b = a.AddDays(i);
            string c = b.ToShortDateString();

            using (System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand())
            {
                cmd.Connection = conn;
                cmd.CommandText = "Insert Into Times (Date1) values ('" + c + "')";

                cmd.ExecuteNonQuery();
            }
        }
    }

感谢任何帮助。

还有,想在这里一石二鸟。作为一个额外的问题,是否可以让这个按钮删除列 (Date1) 下的所有行,然后让它添加 365 天?

谢谢。

【问题讨论】:

  • “数据源”之后没有=,您可能需要用某种引号将路径括起来。
  • 请使用参数化查询来防止 SQL 注入
  • @gunr2171 在所有“数据源”之后我都有一个 = 并且不会造成问题。编辑:我觉得很愚蠢,我没有意识到你指的是我没有。
  • 另外,@Sybren 我有意为本地机器制作这个程序。它不会在线使用。
  • @gunr2171 提交答案,以便我将其标记为正确。它奏效了。

标签: c# ms-access visual-studio-2013 windowsformsintegration


【解决方案1】:

在顶部导入这个

System.Data.OleDb;

private void button3_Click(object sender, EventArgs e)
{
 DateTime a = dateTimePicker1.Value.Date;

 using(OleDbConnection conn = new
 OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data
 Source=C:\Users\Kolton\Desktop\Doctor App\Database1.accdb")) 
 {
        for (int i = 0; i < 366; i++)
        {
            DateTime b = a.AddDays(i);
            string c = b.ToShortDateString();

            using (System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand())
            {
                cmd.Connection = conn;
                cmd.CommandText = "Insert Into Times (Date1) values ('" + c + "')";
                conn.Open();
                cmd.ExecuteNonQuery();
            }

        }
    }
  }
  1. 设置您的连接字符串
  2. 导入 System.Data.OledDB
  3. 也可以使用 Using 进行连接
  4. 如果使用参数化查询会更好

【讨论】:

    【解决方案2】:

    要回答您的奖励问题,您可能只需使用直接访问 UPDATE 查询即可:

    https://support.office.com/en-sg/article/Create-and-run-an-update-query-9dddc97c-f17d-43f4-a729-35e5ee1e0514

    UPDATE table     SET newvalue     WHERE criteria;
    

    所以答案应该是这样的:

    UPDATE Sample set Field1 = DateAdd('d', 365, Field1)
    

    注意:我同意 gunr2171 的观点,即等号可能是问题所在。点赞

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多