这是一个模糊的问题,但我不完全确定从哪里开始。我试图在线查看资源,但我找不到任何东西。
我正在Visual Studio(C#)中创建一个MVC Web应用程序,我在HTML页面上有表格,我希望从SQL Server中的数据库中的表中填充这些表格。 (它受密码保护,但我可以访问它。)
无论如何,我一直在使用它来尝试从我的Web.config连接到数据库:
<connectionStrings>
<add name="UATConnectionString" connectionString="Data Source=***.***.***.**;Initial Catalog=********;User ID=******;Password=******* />
</connectionStrings>
然而,一旦我有了,我不确定如何用数据库中的数据实际填充表格。我试过在线查找一些东西,但没有一个对我有用。 :(
我感谢任何帮助。如果你能够尽可能简单地解释事情,我会很感激,因为我仍然熟悉编码。
答案 0 :(得分:1)
public System.Data.Common.DbProviderFactory GetFactory()
{
System.Data.Common.DbProviderFactory providerFactory = null;
providerFactory = System.Data.Common.DbProviderFactories.GetFactory("System.Data.SqlClient");
return providerFactory;
} // End Function GetFactory
protected System.Data.Common.DbProviderFactory m_providerFactory = null;
m_providerFactory = GetFactory();
public System.Data.IDbConnection GetConnection(string strDb)
{
System.Data.Common.DbConnection con = m_providerFactory.CreateConnection ();
con.ConnectionString = GetConnectionString (strDb);
return con;
}
public System.Data.DataTable GetDataTable(System.Data.IDbCommand cmd, string strDb)
{
System.Data.DataTable dt = new System.Data.DataTable();
using (System.Data.IDbConnection idbc = GetConnection(strDb))
{
lock (idbc)
{
lock (cmd)
{
try
{
cmd.Connection = idbc;
using (System.Data.Common.DbDataAdapter daQueryTable = this.m_providerFactory.CreateDataAdapter())
{
daQueryTable.SelectCommand = (System.Data.Common.DbCommand)cmd;
daQueryTable.Fill(dt);
} // End Using daQueryTable
/*
using (System.Data.SqlClient.SqlDataAdapter daQueryTable = new System.Data.SqlClient.SqlDataAdapter((System.Data.SqlClient.SqlCommand)cmd))
{
daQueryTable.Fill(dt);
} // End Using daQueryTable
*/
} // End Try
catch (System.Data.Common.DbException ex)
{
//COR.Debug.MsgBox("Exception executing ExecuteInTransaction: " + ex.Message);
Log("cMS_SQL.GetDataTable(System.Data.IDbCommand cmd)", ex, cmd.CommandText);
throw;
}// End Catch
finally
{
if (idbc.State != System.Data.ConnectionState.Closed)
idbc.Close();
} // End Finally
} // End lock cmd
} // End lock idbc
} // End Using idbc
return dt;
} // End Function GetDataTable
然后你可以创建一个这样的命令:
public System.Data.IDbCommand CreateCommand(string strSQL)
{
System.Data.IDbCommand idbc = this.m_providerFactory.CreateCommand();
// idbc.CommandText = string.Format(strSQL, " /* TOP 1 */ ", "OFFSET 0 FETCH NEXT 1 ROWS ONLY");
idbc.CommandText = strSQL;
idbc.CommandTimeout = 300;
return idbc;
} // End Function CreateCommand
并像这样使用它:
System.Data.DataTable dt = null;
using(System.Data.IDbCommand cmd = CreateCommand("SELECT * FROM YOUR_Table"))
{
dt = GetDataTable(cmd);
}
你仍然可以添加这个功能:
public System.Data.DataTable GetDataTable(string strSQL, string strInitialCatalog)
{
System.Data.DataTable dt = null;
using (System.Data.IDbCommand cmd = this.CreateCommand(strSQL))
{
dt = GetDataTable(cmd); //, strInitialCatalog);
} // End Using cmd
return dt;
} // End Function GetDataTable
你可以这样做:
System.Data.DataTable dt = GetDataTable("SELECT * FROM YOUR_Table");
要从web / app .config获取连接字符串,您可以使用此功能:
public static string GetConnectionString()
{
return GetConnectionString(null);
} // End Function GetConnectionString
protected static string strStaticConnectionString = null;
public static string GetConnectionString(string strIntitialCatalog)
{
string strReturnValue = null;
string strProviderName = null;
if (string.IsNullOrEmpty(strStaticConnectionString))
{
string strConnectionStringName = System.Environment.MachineName;
if (string.IsNullOrEmpty(strConnectionStringName))
{
strConnectionStringName = "LocalSqlServer";
}
System.Configuration.ConnectionStringSettingsCollection settings = System.Configuration.ConfigurationManager.ConnectionStrings;
if ((settings != null))
{
foreach (System.Configuration.ConnectionStringSettings cs in settings)
{
if (StringComparer.OrdinalIgnoreCase.Equals(cs.Name, strConnectionStringName))
{
strReturnValue = cs.ConnectionString;
strProviderName = cs.ProviderName;
break; // TODO: might not be correct. Was : Exit For
}
}
}
if (string.IsNullOrEmpty(strReturnValue))
{
strConnectionStringName = "server";
System.Configuration.ConnectionStringSettings conString = System.Configuration.ConfigurationManager.ConnectionStrings[strConnectionStringName];
if (conString != null)
{
strReturnValue = conString.ConnectionString;
}
}
if (string.IsNullOrEmpty(strReturnValue))
{
throw new ArgumentNullException("ConnectionString \"" + strConnectionStringName + "\" in file web.config.");
}
settings = null;
strConnectionStringName = null;
}
else
{
if (string.IsNullOrEmpty(strIntitialCatalog))
{
return strStaticConnectionString;
}
strReturnValue = strStaticConnectionString;
}
InitFactory(strProviderName);
System.Data.Common.DbConnectionStringBuilder sb = GetConnectionStringBuilder(strReturnValue);
if (string.IsNullOrEmpty(strStaticConnectionString))
{
if (!Convert.ToBoolean(sb["Integrated Security"]))
{
sb["Password"] = DES.DeCrypt(System.Convert.ToString(sb["Password"]));
}
strReturnValue = sb.ConnectionString;
strStaticConnectionString = strReturnValue;
}
if (!string.IsNullOrEmpty(strIntitialCatalog))
{
sb["Database"] = strIntitialCatalog;
}
strReturnValue = sb.ConnectionString;
sb = null;
return strReturnValue;
} // End Function GetConnectionString
需要:
public static System.Data.Common.DbConnectionStringBuilder GetConnectionStringBuilder(string strConnectionString)
{
System.Data.Common.DbConnectionStringBuilder dbConString = m_ProviderFactory.CreateConnectionStringBuilder();
dbConString.ConnectionString = strConnectionString;
return dbConString;
} // End Functin GetConnectionStringBuilder
这将获得名为Environment.MachineName的连接字符串,或者名为“server:
的连接字符串<connectionStrings>
<add name="YOUR_DEV_MACHINE_NAME" connectionString="Data Source=***.***.***.**;Initial Catalog=********;User ID=******;Password=******* />
<add name="server" connectionString="Data Source=***.***.***.**;Initial Catalog=********;User ID=******;Password=******* />
</connectionStrings>
这就是你如何正确地做到这一点 与往常一样,不正确地做这件事要容易得多:
public static System.Data.DataTable LazyGetDataTable()
{
System.Data.DataTable dt = new System.Data.DataTable();
dt.TableName = "lalala - Not really necessary";
using (System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter("SELECT * FROM YOUR_TABLE", "YOUR CONNECTION STRING HERE"))
{
da.Fill(dt);
}
return dt;
} // End Function LazyGetDataTable
但如果你这样做,如果你想从Microsoft SQL-Server更改为其他东西,你将不得不重写你的代码。
答案 1 :(得分:0)
有很多方法可以实现这一目标。 您可以使用entity-framework:
或DataAdapters:
(第二个链接有一个小示例代码)