"无法将类型IDbConnection隐式转换为SqlConnection"

时间:2014-06-13 15:32:18

标签: c# sql sql-server unity3d

我需要一些帮助。

我尝试在我的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
    }
}

3 个答案:

答案 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注入是一个很大的问题。