我需要一些帮助。
我尝试在我的SQL数据库中创建一个INSERT
,但我不能,因为在这段代码中给我一个错误:
commandoSQL.Connection = dbcon;
我收到此错误:
Assets / NGUI / Scripts / Interaction / ChamarVariavel.cs(43,49):错误CS0266:无法隐式转换类型
System.Data.IDbConnection' to
System.Data.SqlClient.SqlConnection'。存在显式转换(您是否错过了演员?)“
我希望有人能帮助我。
由于
我的代码:
public class ChamarVariavel : MonoBehaviour {
public UISlider slider;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
void OnGUI(){
// Connection DB
string connectionString = "Data Source=(local);Initial Catalog=Test;User ID=******;Password=*******";
IDbConnection dbcon;
dbcon= new SqlConnection(connectionString);
dbcon.Open();
//DB Online
float x = slider.value * 100;
GUI.Label(new Rect( 570, 238, 70, 30 ), "(" + x.ToString("f2") + ")");
string qInsert = string.Format(@"INSERT INTO Fuel (fuel) VALUES ('{0}')", x);
SqlCommand commandoSQL = new SqlCommand(qInsert);
commandoSQL.Connection = dbcon;
try
{
commandoSQL.ExecuteNonQuery();
}
catch (Exception ex)
{
GUI.Label(new Rect( 300, 40, 300, 300 ), ex.ToString());
}
dbcon.Close();
//DB offline
}
}
答案 0 :(得分:6)
错误实际上是告诉你问题,你需要明确地投射对象,因为SqlCommand
正在寻找SqlConnection
,考虑这样做:
new SqlCommand(qInsert, (SqlConnection)dbcon);
并删除此行:
commandoSQL.Connection = dbcon;
另一个选择是将dbcon
定义为SqlConnection
:
SqlConnection dbcon
然后你可以这样做:
new SqlCommand(qInsert, dbcon);
最后,看一下我写的blog post;你需要改变你使用对象的方式。
答案 1 :(得分:3)
这样可行:
commandoSQL.Connection = (SQLConnection)dbcon;
因为dbcon
被声明为IDBConnection,但实际上是一个SQL连接但是有点愚蠢。
简单地做
var dbcon = new SqlConnection(connectionString);
并删除
IDbConnection dbcon;
,它将被声明为正确的类型。没有理由我可以通过声明为IDBconnection来了解它为什么需要。
答案 2 :(得分:3)
那里有一种替代方法,它有助于概括您的数据访问代码:让连接创建命令:
using(var commandoSQL = dbcon.CreateCommand()) {
commandoSQL.CommandText = SQL;
//..
}
在其他新闻中:使用参数,而不是string.Format。 SQL注入是一个很大的问题。