如何解决我需要通过 ConnectionString 将我的 ASP.net MVC 项目连接到我的 Google Cloud SQL/PgAdmin 4
我是新来的,这是我的第一个问题。我一般在连接数据库时遇到一些问题,我只在 Visual Studio 中使用本地数据库成功过。
背景
本项目使用的软件:
我正在用 C# 编程。我使用免费试用版在 Google Cloud Platform 中创建了一个新数据库。我有一个名为“DrinkandDine”en_US.UTF8 UTF8 的数据库正在运行。它所说的实例是“jasc1800”,这就是我给它起的名字。
我通过公共 IP 在 Google Cloud Platform 内部创建了一个新连接:
名称:DrinkAndDine 网络:我的 IPv4 地址
然后我进入 PgAdmin 4 并连接到这个服务器数据库。它工作正常,到目前为止我已经创建了一个名为“users”的表,只有一个 ID 和电子邮件。
连接
在 Visual Studio ASP.net MVC 项目中,我将其放入 Web.config 中的 connectionStrings 中:
<add name="DefaultConn" connectionString="Server=35.xx.x.xx; Port=5432; Database=DrinkandDine; User Id=postgres; Password=xx;"/>
我这样做是因为我知道我需要连接到 PgAdmin 4 数据库?还是我理解错了? Visual Studio 项目连接到 PgAdmin 4 连接,然后 PgAdmin 4 连接到 Google Cloud Platform。
我创建了一个名为 AppDbContext 的类:DbContext(从 DbContext 继承)并在里面放入以下代码:
public List<User> GetAllUsers()
{
User user;
List<User> userList = new List<User>();
string stmt = "SELECT * FROM User";
var conn = new
NpgsqlConnection(ConfigurationManager.ConnectionStrings["DefaultConn"].ConnectionString);
conn.open();
var cmd = new NpgsqlCommand(stmt,conn);
var reader = cmd.ExecuteReader();
while (reader.Read())
{
user = new User()
{
Id = reader.GetInt32(0),Email = reader.GetString(1),};
}
return userList;
}
然后我在 HomeController 中创建了以下内容:
public ActionResult GetAllUsers()
{
AppDbContext db = new AppDbContext();
return View(db.GetAllUsers());
}
之后,我将其放入一个名为 GetAllUsers 的视图中:
@model List<DrinkAndDine.Models.User>
@{
ViewBag.Title = "GetAllUsers";
}
<div>
<h2>These are the users on the website</h2>
<p>
@foreach (var item in Model)
{
<p>
ID: @item.Id Email: @item.Email
</p>
}
</p>
</div>
system.invalidCastException
HResult=0x80004002
Message=Can't cast database type name to Int32
Source=Npgsql
StackTrace:
at Npgsql.TypeHandling.NpgsqlTypeHandler`1.Read[TAny](NpgsqlReadBuffer buf,Int32 len,Boolean async,FieldDescription fieldDescription)
at Npgsql.TypeHandling.NpgsqlTypeHandler`1.Read[TAny](NpgsqlReadBuffer buf,FieldDescription fieldDescription)
at Npgsql.NpgsqlDataReader.GetFieldValue[T](Int32 ordinal)
at Npgsql.NpgsqlDataReader.GetInt32(Int32 ordinal)
at DrinkAndDine.Models.AppDbContext.GetAllUsers() in C:\Users\jakob\OneDrive\Desktop\Programming\Visual Studio Projects\DrinkAndDine\Models\AppDbContext.cs:line 34
at DrinkAndDine.Controllers.HomeController.GetAllUsers() in C:\Users\jakob\OneDrive\Desktop\Programming\Visual Studio Projects\DrinkAndDine\Controllers\HomeController.cs:line 34
at System.Web.Mvc.ActionMethoddispatcher.Execute(ControllerBase controller,Object[] parameters)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext,IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext,ActionDescriptor actionDescriptor,IDictionary`2 parameters)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c.<BeginInvokeSynchronousActionMethod>b__9_0(IAsyncResult asyncResult,ActionInvocation innerInvokeState)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__displayClass11_0.<InvokeActionMethodFilterasynchronouslyRecursive>b__0()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__displayClass11_2.<InvokeActionMethodFilterasynchronouslyRecursive>b__2()
这是很多信息,我不知道我需要做什么或做错了什么。一开始我尝试了一种不同的方法,但也不起作用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。