gpt4 book ai didi

c# - 我收到此错误无法将字符串隐式转换为 system.data.datatable

转载 作者:行者123 更新时间:2023-11-30 22:55:03 26 4
gpt4 key购买 nike

从组合选择的值将其传递给存储过程并使用序列化生成条形图仪表板。但它向我显示错误

cannot implicitly convert a string to system.data.datatable

使用DataTable和序列化

这行错误

return serializer.Serialize(rows);

.cs代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;



namespace VOT.DashboardPages
{
public partial class Velocity : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand("SELECT ProjectNo FROM [dbo].[ProjectPlan] ORDER BY ProjectNo asc"))
{
cmd.CommandType = CommandType.Text;
cmd.Connection = con;
con.Open();
ddlProjectNo.DataSource = cmd.ExecuteReader();
ddlProjectNo.DataTextField = "ProjectNo";
ddlProjectNo.DataValueField = "ProjectNo";
ddlProjectNo.DataBind();
con.Close();
}
}
ddlProjectNo.Items.Insert(0, new ListItem("--Select ProjectNo--", "0"));
}
}

public DataTable BindData(String prjNo)
{
DataTable dt = new DataTable();
SqlConnection connection = new SqlConnection("constr");
try
{
connection.Open();
SqlCommand sqlcmd = new SqlCommand("VelocityByOperationType", connection);
sqlcmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter sqlDa = new SqlDataAdapter(sqlcmd);
sqlcmd.Parameters.AddWithValue("@prjNo", prjNo);
sqlDa.Fill(dt);
System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();

List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();

Dictionary<string, object> row;
foreach (DataRow dr in dt.Rows)
{
row = new Dictionary<string, object>();
foreach (DataColumn col in dt.Columns)
{
row.Add(col.ColumnName, dr[col]);
}
rows.Add(row);
}

return serializer.Serialize(rows);

}
finally
{
connection.Close();
}
}


protected void ddlProjectNo_SelectedIndexChanged(object Sender,EventArgs e)
{
TextBox1.Text = ddlProjectNo.SelectedItem.Value;
DataTable dt = BindData(ddlProjectNo.SelectedItem.Value);
//if(dt.Rows.Count>0)
//{

//}
}
}

} enter image description here

最佳答案

Serialize方法返回一个字符串,而不是一个 DataTable。

如果您想从该方法返回 DataTable,则需要将返回的变量(第 68 行)替换为以下内容:

return dt;

这将在调用方法时返回填充的 DataTable 和 DataRows。

例如,如果您想返回 DataRows 的序列化字符串,则需要将方法签名从 DataTable 更改为字符串或创建一个新方法。

public string ReturnSerialisedData()
{
// Add data table code here
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Serialize(rows);
}

作为附加说明,您可能希望将代码分成更多的服务/数据访问层,而不是直接在 Page_Load 事件中执行数据库操作。

关于c# - 我收到此错误无法将字符串隐式转换为 system.data.datatable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55673127/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com