这是我现在的代码:

private static MySqlConnection conn = null;
private static MySqlDataAdapter AccountsDa = null;
private static MySqlCommandBuilder AccountsCb = null;
AccountsDa = new MySqlDataAdapter("SELECT * FROM accounts", conn);
AccountsCb = new MySqlCommandBuilder(AccountsDa);
Accounts = new DataTable();
AccountsDa.Fill(Accounts);

我试图弄清楚如何定义列默认值而不必手动完成
如果我喜欢这样:
DataColumn col = new DataColumn();
col.ColumnName = "id";
col.AllowDBNull = false;
col.DataType = System.Type.GetType("System.Int32");
col.DefaultValue = 0;
Accounts.Columns.Add(col);

对于每个列,它都可以正常工作,但是如何在填充表时自动设置数据库中的默认值。我希望我不必手动定义 30 列。

我尝试了 Accountsda.FillSchema(Accounts, SchemaType.Source);
它设置了允许空值和自动增量但不是默认值

稍后在数据表中添加一行时会出现问题,有时我只需要为一列设置值,而让其余列使用它们的默认值。

我可以用 180 行代码来手动定义插入行的默认值,但是在创建/填充数据表时必须有一种方法可以从数据库中获取它

我在内存数据表中使用,因为有时数据只会存在 2 分钟,然后再次被删除,因为这是用于在线 rts 游戏的专用服务器。所以为了保存对数据库的点击,我使用数据表并操作它们并每 10 分钟刷新一次,这样我每 10 分钟只有 1,000 次点击数据库,而不是可能有 40,000 次点击

最佳答案

根据 msdn 大师的说法,最终在他们的论坛上得到回复后,不可能获得默认值。您所能做的就是加载该值是否允许为空以及它的自动增量但随后您必须设置种子并踩自动增量它也不会从数据库中获取该值但他们提供了一个速记版本它减少到 30 行代码而不是 180 行

在调用 fillschema 然后填充数据表后可以简单地这样做,将其减少到一行而不是六行

Cities.Columns["wood"].DefaultValue = 0;

在几次回复之后,甚至有一种更简单的方法来做到这一点,而不是我想要的方式,但也许它会帮助其他人走在同一条路上,而不是每列一行,这将它们全部分为 3 行
foreach (DataColumn col in Cities.Columns) {
    if (col.ColumnName != "id") col.DefaultValue = 0;
}

id 是主键,不能设置默认值

关于c# - 使用mysqldataadapter归档时设置数据表的列默认值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15582796/

10-14 18:04
查看更多