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

标签 c# sql .net sql-server datatable

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

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/

相关文章:

c# - C# 和 typescript 之间 JSON 的端到端类型安全

mysql - 数据库设计——来自多个来源的独特数据

java - WHERE 子句问题

c# - 尽管在 Javascript 中工作,但正则表达式在 C# 中不工作

C# WPF : Listbox with drag to select text

java - 从 Java 代码调用 SQL 查询

.net - WCF 作为具有最小有效负载的 Web 服务

c# - 为什么使用 foreach 迭代时不需要实现 IEnumerable

c# - .aspx 代码错误 "Element ' xxxx' 不受支持。”

c# - 在 Windows 8.1 GridView 中不显示 Visibility=Collapsed 的项目