C# 从数据库的数据表中添加列

标签 c# mysql datatable

我有一个来自存储过程的数据表。我想添加一个名为“Assessment”的列,该列将从 sql 查询中填充。最后我想用这个数据表填充商店。在 Visual Studio 中,我看到包含“SiteId”的数据表列名为 7。但我收到此错误:

Load failed:Column '7' does not belong to table .

和代码:

DAL.DBDataContext dc = new DAL.DBDataContext();
try
{
    SqlConnection sqlConnection1 = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DBConnectionString"].ConnectionString);
    SqlCommand cmd = new SqlCommand();
    SqlDataReader sqlreader;

    cmd.CommandText = "StorProc";
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add(new SqlParameter("@CTid", ctid));

    cmd.Connection = sqlConnection1;
    sqlConnection1.Open();
    sqlreader = cmd.ExecuteReader();

    var dt = new DataTable();
    dt.Load(sqlreader);

    //Add assessment column
    dt.Columns.Add("Assessment", typeof(System.String));

    var data = new List<object>();
    foreach (DataRow r in dt.Rows)
    {
        if (r[7] != null)
        {
            var res = (from d in dc.Doctors
                       join ct in dc.CTUsers on d.id equals ct.DoctorId
                       where ct.CTid == ctid && ct.SiteId == Int32.Parse(r["7"].ToString())
                       select d).FirstOrDefault();
            r["Assessment"] = res.Assessment;
        }                     
        data.Add(r);
    }

    this.storeSites.DataSource = dt;
    this.storeSites.DataBind();
    sqlConnection1.Close();
}
catch (Exception a)
{
    X.Msg.Alert("Warning", "Load failed:" + a.Message).Show();
}

VisualStudio

最佳答案

请尝试这个:

foreach (DataRow r in dt.Rows)
{
  foreach(DataColumn column in dt.Columns)
  {
    if (r[column] != null && r[column].ColumnName == "some column name")
    {
     var res = (from d in dc.Doctors
     join ct in dc.CTUsers on d.id equals ct.DoctorId
     where ct.CTid == ctid && ct.SiteId == Int32.Parse(r[column].ToString())
     select d).FirstOrDefault();
     r["Assessment"] = res.Assessment;
    }                     
  }
  data.Add(r);
}

Int32.Parse(r["7"].ToString() 不正确。您正在请求名为 7 的列。

我认为上面的代码更清晰。

编辑

您还可以像这样访问行列值:

r.ItemArray[i].ToString()

像这样:

for (int i = 0; i < dt.Rows.Count; i++)
{
  var r = dt.Rows[i];
  var value = r.ItemArray[7].ToString();
    if (!String.IsNullOrEmpty(value))
    {
     var res = (from d in dc.Doctors
     join ct in dc.CTUsers on d.id equals ct.DoctorId
     where ct.CTid == ctid && ct.SiteId == Int32.Parse(value)
     select d).FirstOrDefault();
     r["Assessment"] = res.Assessment;
    }   
  data.Add(r);
}

关于C# 从数据库的数据表中添加列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43208002/

相关文章:

javascript - dataTables:删除除一个选择输入外的所有输入

datatable - 从 pdf 导出的数据表标题中删除选择选项

c# - PlatformNotSupportedException 使用 .NET 语音识别

java - 在数据库中存储形状的最佳方式是什么

php - 如何将图像上传到具有多对多关系的表单?

php array - 为每个唯一的电子邮件地址发送一封电子邮件,将数据分组在一起

javascript - Jquery Datatable - 将值从一个 "Data"元素传递到另一个元素

c# - RX : How to concat a Snapshot stream and an Update stream?

c# - 当我尝试加入 2 个数据表时,对象引用未设置为对象的实例

c# - child 对象与 parent 的沟通模式