不包含“添加”的定义,也不包含“添加”接受第一个参数的扩展方法

时间:2014-12-16 20:33:16

标签: c# asp.net class

我在使用行中的“添加”时遇到问题:

dc.Add(col.ColumnName,dr [col]);

我在Class1.cs中的类声明应该注意这个:

dataclass dc = new dataclass();

错误代码:

 'CertainDate.dataclass' does not contain a definition for 'Add' and no extension method 'Add' accepting a first argument of type 'CertainDate.dataclass' could be found (are you missing a using directive or an assembly reference?)

Default.aspx.cs

    public static string GetDate(string mo, string dy, string yr)
    {
        string json = "";
        string date1 = mo.ToString() + "/" + dy.ToString() + "/" + yr.ToString() + " 8:00 AM";
        if (date1.Length > 6)
        {
            List<dataclass> returndata = new List<dataclass>();
            dataclass dc = new dataclass();
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            string connStr = ConfigurationManager.ConnectionStrings["jsonobject"].ConnectionString;
            string cmdStr = "SELECT ([idd],[datetime],[col1],[col2],[col3]) FROM [jsondata] WHERE [datetime]=@datetime;";
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                using (SqlCommand cmd = new SqlCommand(cmdStr, conn))
                {
                    conn.Open();
                    cmd.Parameters.AddWithValue("@datetime", date1);
                    using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                    {
                        da.Fill(ds);
                        dt = ds.Tables[0];
                        foreach (DataRow dr in dt.Rows)
                        {
                            foreach (DataColumn col in dt.Columns)
                            {
                                dc.Add(col.ColumnName, dr[col]);
                            }
                            returndata.Add(dc);
                        }
                    }
                }
            }
            System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
            json = serializer.Serialize(returndata);
        }
        return json;
    }

的Class1.cs

public class dataclass
{
    public string idd { get; set; }
    public string datetime { get; set; }
    public string col1 { get; set; }
    public string col2 { get; set; }
    public string col3 { get; set; }
}

3 个答案:

答案 0 :(得分:1)

您似乎想要将检索到的每个数据行添加到您的返回数据列表中,如果是这种情况,则可能您需要此

....
foreach (DataRow dr in dt.Rows)
{
    dataclass dc = new dataclass();
    dc.idd = dr["idd"].ToString();
    dc.datetime = dr["datetime"].ToString();
    dc.col1 = dr["col1"].ToString();
    dc.col2 = dr["col2"].ToString();
    dc.col3 = dr["col3"].ToString();
    returndata.Add(dc);
}
...

当然,错误是由于您调用了一个不存在的方法。数据类没有Add方法,因此无法调用它。您可以定义它并传递数据流,但这实际上是不必要的。

您还应该非常小心评估返回的数据。如果您的行中没有任何空值,则上面的代码很有效。如果您有空值,那么您应该查看DataRow.IsNull种方法

作为旁注,如果你在其他类中有很多这些情况(意味着转换在特定类的对象实例中加载的记录),那么你可以看一下将删除所有这些代码的ORM。例如,请查看Dapper

答案 1 :(得分:0)

您正在调用dataclass实例的add方法,但您没有数据类中add方法的定义。

...
foreach (DataColumn col in dt.Columns)
{
    dc.Add(col.ColumnName, dr[col]); //Error
}

答案 2 :(得分:0)

所以dataclass,在你的问题中,是一个没有名为Add的方法的自定义类 - 这就是你的错误所说的。

我相信您要做的是将dataclass的新实例添加到returndata - 这是一个List<>并且DOES有一个Add方法

所以,改变这个:

foreach (DataColumn col in dt.Columns)
{
        dc.Add(col.ColumnName, dr[col]);
}
returndata.Add(dc)

对此 - 这是一个单行班轮,它在添加到returndata期间创建了一个数据类实例 - 您需要使用{{1}中的那些属性填充dataclass的属性。 - 我们不知道你的问题是什么。

col

或者,如果您通过创建foreach (DataColumn col in dt.Columns) { returndata.Add(new dataclass(){ idd = ,//whatever column out of col datetime = //do the same }); } 更加舒适(并且更容易调试),填充它然后将其添加到dataclass,那么请执行以下操作:

returndata