C# ODBC输出有没有更简单的方法-使用C ASP.NET MVC 4/5
我的公司使用ODBC进行数据收集,目标是将多个数据源拉到一个地方。 目前,如下图所示,我的控制器顶部有一个连接设置,连接到公司提供的ODBC连接。我将列名传递给数组列表,数组列表将传递给ViewBag。我对收集的数据也这样做。 这最终给了我一个没有索引键或任何引用的平面数组 迈利斯特 数组=列名[0],列名[1],列名[2] 资料 数组=行[0],行[1],行[2],行[0],行[1],行[2],行[0],行[1],行[2] 为了以一种对最终用户真正有意义的形式输出数据,我在视图中进行了一些黑客操作以输出数据。我对上面示例中的数据数组进行计数,它是9。在上面的示例中,我计算单元格以获得标题行,它是3。我创建了一个for循环,并在其中进行迭代,以计算标题与行之间的差异,以便获得数据的结束行并重置tr。我的结束输出如下所示,以供参考 [我的问题] 有没有更简单的方法来使用.Read命令?如何将数据添加到多维数组中,并输出每行的单个值的内容 输出索引.html 控制器-Project.cs View-Index.CSHTMLC# ODBC输出有没有更简单的方法-使用C ASP.NET MVC 4/5,c#,asp.net-mvc,odbc,C#,Asp.net Mvc,Odbc,我的公司使用ODBC进行数据收集,目标是将多个数据源拉到一个地方。 目前,如下图所示,我的控制器顶部有一个连接设置,连接到公司提供的ODBC连接。我将列名传递给数组列表,数组列表将传递给ViewBag。我对收集的数据也这样做。 这最终给了我一个没有索引键或任何引用的平面数组 迈利斯特 数组=列名[0],列名[1],列名[2] 资料 数组=行[0],行[1],行[2],行[0],行[1],行[2],行[0],行[1],行[2] 为了以一种对最终用户真正有意义的形式输出数据,我在视图中进行了一些黑客
通过在web.config中创建和/或设置多个连接字符串,可以绕过ODBC。我们目前使用Oracle DB和Sql Server,并找到了一种简单的方法来实现这一点,从而消除了对ODBC的需求。。查看此链接,了解如何根据您使用的数据库提供程序的类型配置连接字符串。web.config是否保存我的连接字符串或该字符串是否在控制器中声明是否重要?您是否建议我也可以使用另一个提供程序并从我连接的ODBC视图访问数据?为了在my index.cshtml中创建用于迭代的列表和适当数组,您可以在web.config中保存尽可能多的连接字符串,也可以在节点下的配置文件中保存多个和/或不同的数据库。。如果您了解如何访问和/或连接到数据库,则根本不需要ODBC。您熟悉如何使用web.config连接到数据库以及如何配置连接字符串吗?我的web.config中有多个到SQL server的连接字符串。这个控制器从数据库ODBC SQL中提取数据,我只能访问视图而不能访问表。视图将相应地设置,并包含FK和约束。我不能改变他们的数据库。当我选择退出ODBC并使用SQL作为提供程序时,我最终能够查看我的视图,但无法对视图运行查询,访问总是被拒绝。我能够访问数据的唯一方法是通过ODBC命令。您能说明配置是如何设置的吗。。我想你可能没有领会我的意思。。您发现odbc连接的用户id和用户密码是什么。。只需将其放入配置文件的连接字符串中,您将使其变得比需要的更困难。。我每天对多个数据库连接执行此操作,并向我展示您的配置
<table class="table table-hover table-bordered">
<tr>
<th>Column Name[0]</th>
<th>Column Name[1]</th>
<th>Column Name[2]</th>
</tr>
<tbody>
<tr><td>Row[0]</td><td>Row[1]</td><td>Row[2]</td></tr>
<tr><td>Row[0]</td><td>Row[1]</td><td>Row[2]</td></tr>
<tr><td>Row[0]</td><td>Row[1]</td><td>Row[2]</td></tr>
</tbody>
</table>
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data.Odbc;
using System.Data.SqlClient;
namespace Project.Controllers
{
public class ODBC: Controller
{
OdbcConnection DBConnection = new OdbcConnection("DSN=Server;UID=USER;PWD=PASS;DATABASE=DATA-MARKET");
public ActionResult Index()
{
DBConnection.Open();
OdbcCommand DbCommand = DBConnection.CreateCommand();
DbCommand.CommandText = "SELECT \"ID\", \"Request ID\", \"Service ID\", \"Summary\" FROM dbo.\"Records\" WHERE (\"Status Rejected User\" IS NULL)";
OdbcDataReader DbReader = DbCommand.ExecuteReader();
int fCount = DbReader.FieldCount;
ArrayList myList = new ArrayList();
for (int i = 0; i < fCount; i++)
{
myList.Add(DbReader.GetName(i));
}
ViewBag.Count = myList;
ArrayList data = new ArrayList();
while (DbReader.Read())
{
for (int i = 0; i < fCount; i++)
{
data.Add(DbReader.GetValue(i));
}
}
ViewBag.fCount = fCount;
DbReader.Close();
DbCommand.Dispose();
DBConnection.Close();
ViewBag.data = data;
return View();
}
@model IEnumerable<Project.Controllers.ODBCController>
@{
ViewBag.Title = "Index";
var cell_count = @ViewBag.Count.Count;
}
<h2>Index -</h2>
<table class="table table-hover table-bordered">
<tr>
@foreach( var ls in @ViewBag.Count){
<th>@ls</th>
}
</tr>
<tbody>
@for (int i = 0; i < ViewBag.data.Count; i++)
{
var cells = cell_count;
var item = ViewBag.data[i];
if ((i % cells) == 0)
{
@:<tr>
}
<td>
@item
</td>
if (i == (ViewBag.data.Count - 1))
{
while ((i % cells) != 0)
{
@:<td></td>
i++;
}
}
if ((i % cells) == (cells - 1)) // aka: last row cell
{
@:</tr>
}
}
</tbody>
</table>