我在使用行中的“添加”时遇到问题:
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; }
}
答案 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