|
JDBC连接各种数据库经验总结
2007年12月04日 星期二 12:11
Java数据库连接(JDBC)由一组用 Java 编程语言编写的类和接口组成。JDBC 为工具/数据库开发人员提供了一个标准的 API,使他们能够用纯Java API 来编写数据库应用程序。然而各个开发商的接口并不完全相同,所以开发环境的变化会带来一定的配置变化。本文主要集合了不同数据库的连接方式。 一、连接各种数据库方式速查表 下面罗列了各种数据库使用JDBC连接的方式,可以作为一个手册使用。 1、Oracle8/8i/9i数据库(thin模式) Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl为数据库的SID String user="test"; String password="test"; Connection conn= DriverManager.getConnection(url,user,password); 2、DB2数据库 Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance(); String url="jdbc:db2://localhost:5000/sample"; //sample为你的数据库名 String user="admin"; String password=""; Connection conn= DriverManager.getConnection(url,user,password); 3、Sql Server7.0/2000数据库 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb"; //mydb为数据库 String user="sa"; String password=""; Connection conn= DriverManager.getConnection(url,user,password); 4、Sybase数据库 Class.forName("com.sybase.jdbc.SybDriver").newInstance(); String url =" jdbc:sybase:Tds:localhost:5007/myDB";//myDB为你的数据库名 Properties sysProps = System.getProperties(); SysProps.put("user","userid"); SysProps.put("password","user_password"); Connection conn= DriverManager.getConnection(url, SysProps); 5、Informix数据库 Class.forName("com.informix.jdbc.IfxDriver").newInstance(); String url = "jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver; user=testuser;password=testpassword"; //myDB为数据库名 Connection conn= DriverManager.getConnection(url); 6、MySQL数据库 Class.forName("org.gjt.mm.mysql.Driver").newInstance(); String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1" //myDB为数据库名 Connection conn= DriverManager.getConnection(url); 7、PostgreSQL数据库 Class.forName("org.postgresql.Driver").newInstance(); String url ="jdbc:postgresql://localhost/myDB" //myDB为数据库名 String user="myuser"; String password="mypassword"; Connection conn= DriverManager.getConnection(url,user,password); 8、access数据库直连用ODBC的 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ; String url="jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ="+application.getRealPath("/Data/ReportDemo.mdb"); Connection conn = DriverManager.getConnection(url,"",""); Statement stmtNew=conn.createStatement() ; 二、JDBC连接MySql方式 下面是使用JDBC连接MySql的一个小的教程 1、查找驱动程序 MySQL目前提供的java驱动程序为Connection/J,可以从MySQL官方网站下载,并找到mysql-connector-java-3.0.15-ga-bin.jar文件,此驱动程序为纯java驱动程序,不需做其他配置。 2、动态指定classpath 如果需要执行时动态指定classpath,就在执行时采用-cp方式。否则将上面的.jar文件加入到classpath环境变量中。 3、加载驱动程序 try{ Class.forName(com.mysql.jdbc.Driver); System.out.println(Success loading Mysql Driver!); }catch(Exception e) { System.out.println(Error loading Mysql Driver!); e.printStackTrace(); } 4、设置连接的url jdbc:mysql://localhost/databasename[?pa=va][&pa=va] 三、以下列出了在使用JDBC来连接Oracle数据库时可以使用的一些技巧 1、在客户端软件开发中使用Thin驱动程序 在开发Java软件方面,Oracle的数据库提供了四种类型的驱动程序,二种用于应用软件、applets、servlets等客户端软件,另外二种用于数据库中的Java存储过程等服务器端软件。在客户机端软件的开发中,我们可以选择OCI驱动程序或Thin驱动程序。OCI驱动程序利用Java本地化接口(JNI),通过Oracle客户端软件与数据库进行通讯。Thin驱动程序是纯Java驱动程序,它直接与数据库进行通讯。为了获得最高的性能,Oracle建议在客户端软件的开发中使用OCI驱动程序,这似乎是正确的。但我建议使用Thin驱动程序,因为通过多次测试发现,在通常情况下,Thin驱动程序的性能都超过了OCI驱动程序。 2、关闭自动提交功能,提高系统性能 在第一次建立与数据库的连接时,在缺省情况下,连接是在自动提交模式下的。为了获得更好的性能,可以通过调用带布尔值false参数的Connection类的setAutoCommit()方法关闭自动提交功能,如下所示: conn.setAutoCommit(false); 值得注意的是,一旦关闭了自动提交功能,我们就需要通过调用Connection类的commit()和rollback()方法来人工的方式对事务进行管理。 3、在动态SQL或有时间限制的命令中使用Statement对象 在执行SQL命令时,我们有二种选择:可以使用PreparedStatement对象,也可以使用Statement对象。无论多少次地使用同一个SQL命令,PreparedStatement都只对它解析和编译一次。当使用Statement对象时,每次执行一个SQL命令时,都会对它进行解析和编译。这可能会使你认为,使用PreparedStatement对象比使用Statement对象的速度更快。然而,我进行的测试表明,在客户端软件中,情况并非如此。因此,在有时间限制的SQL操作中,除非成批地处理SQL命令,我们应当考虑使用Statement对象。 此外,使用Statement对象也使得编写动态SQL命令更加简单,因为我们可以将字符串连接在一起,建立一个有效的SQL命令。因此,我认为,Statement对象可以使动态SQL命令的创建和执行变得更加简单。 4、利用helper函数对动态SQL命令进行格式化 在创建使用Statement对象执行的动态SQL命令时,我们需要处理一些格式化方面的问题。例如,如果我们想创建一个将名字O'Reilly插入表中的SQL命令,则必须使用二个相连的"''"号替换O'Reilly中的"'"号。完成这些工作的最好的方法是创建一个完成替换操作的helper方法,然后在连接字符串心服用公式表达一个SQL命令时,使用创建的helper方法。与此类似的是,我们可以让helper方法接受一个Date型的值,然后让它输出基于Oracle的to_date()函数的字符串表达式。 5、利用PreparedStatement对象提高数据库的总体效率 在使用PreparedStatement对象执行SQL命令时,命令被数据库进行解析和编译,然后被放到命令缓冲区。然后,每当执行同一个PreparedStatement对象时,它就会被再解析一次,但不会被再次编译。在缓冲区中可以发现预编译的命令,并且可以重新使用。在有大量用户的企业级应用软件中,经常会重复执行相同的SQL命令,使用PreparedStatement对象带来的编译次数的减少能够提高数据库的总体性能。如果不是在客户端创建、预备、执行PreparedStatement任务需要的时间长于Statement任务,我会建议在除动态SQL命令之外的所有情况下使用PreparedStatement对象。 6、在成批处理重复的插入或更新操作中使用PreparedStatement对象 如果成批地处理插入和更新操作,就能够显著地减少它们所需要的时间。Oracle提供的Statement和 CallableStatement并不真正地支持批处理,只有PreparedStatement对象才真正地支持批处理。我们可以使用addBatch()和executeBatch()方法选择标准的JDBC批处理,或者通过利用PreparedStatement对象的setExecuteBatch()方法和标准的executeUpdate()方法选择速度更快的Oracle专有的方法。要使用Oracle专有的批处理机制,可以以如下所示的方式调用setExecuteBatch(): PreparedStatement pstmt3D null; try { ((OraclePreparedStatement)pstmt).setExecuteBatch(30); ... pstmt.executeUpdate(); } 调用setExecuteBatch()时指定的值是一个上限,当达到该值时,就会自动地引发SQL命令执行,标准的executeUpdate()方法就会被作为批处理送到数据库中。我们可以通过调用PreparedStatement类的sendBatch()方法随时传输批处理任务。 7、使用Oracle locator方法插入、更新大对象(LOB) Oracle的PreparedStatement类不完全支持BLOB和CLOB等大对象的处理,尤其是Thin驱动程序不支持利用PreparedStatement对象的setObject()和setBinaryStream()方法设置BLOB的值,也不支持利用setCharacterStream()方法设置CLOB的值。只有locator本身中的方法才能够从数据库中获取LOB类型的值。可以使用PreparedStatement对象插入或更新LOB,但需要使用locator才能获取LOB的值。由于存在这二个问题,因此,我建议使用locator的方法来插入、更新或获取LOB的值。 8、使用SQL92语法调用存储过程 在调用存储过程时,我们可以使用SQL92或Oracle PL/SQL,由于使用Oracle PL/SQL并没有什么实际的好处,而且会给以后维护你的应用程序的开发人员带来麻烦,因此,我建议在调用存储过程时使用SQL92。 9、使用Object SQL将对象模式转移到数据库中 既然可以将Oracle的数据库作为一种面向对象的数据库来使用,就可以考虑将应用程序中的面向对象模式转到数据库中。目前的方法是创建Java bean作为伪装的数据库对象,将它们的属性映射到关系表中,然后在这些bean中添加方法。尽管这样作在Java中没有什么问题,但由于操作都是在数据库之外进行的,因此其他访问数据库的应用软件无法利用对象模式。如果利用Oracle的面向对象的技术,可以通过创建一个新的数据库对象类型在数据库中模仿其数据和操作,然后使用JPublisher等工具生成自己的Java bean类。如果使用这种方式,不但Java应用程序可以使用应用软件的对象模式,其他需要共享你的应用中的数据和操作的应用软件也可以使用应用软件中的对象模式。 10、利用SQL完成数据库内的操作 我要向大家介绍的最重要的经验是充分利用SQL的面向集合的方法来解决数据库处理需求,而不是使用Java等过程化的编程语言。 如果编程人员要在一个表中查找许多行,结果中的每个行都会查找其他表中的数据,最后,编程人员创建了独立的UPDATE命令来成批地更新第一个表中的数据。与此类似的任务可以通过在set子句中使用多列子查询而在一个UPDATE命令中完成。当能够在单一的SQL命令中完成任务,何必要让数据在网上流来流去的?我建议用户认真学习如何最大限度地发挥SQL的功能。 11 JNDI <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/test"> <parameter> <name>username</name> <value>system</value> </parameter> <parameter> <name>password</name> <value>manager</value> </parameter> <parameter> <name>driverClassName</name> <value>oracle.jdbc.driver.OracleDriver</value> </parameter> <parameter> <name>url</name> <value>jdbc:oracle:thin:@192.168.0.27:1521:titan</value> </parameter> </ResourceParams> try{ InitialContext ctx=new InitialContext(); Object o = ctx.lookup("java:comp/env/hibernate"); out.print("class="+o.getClass().getName()); DataSource ds=(javax.sql.DataSource)o; }catch(NamingException e){ e.printSatckTrace; }
|
http://hi.baidu.com/29163077/blog/item/c0a6f560a4c25047eaf8f81c.html
数据库知识总结
2008-01-10 15:35
一.用SqlConnection连接SQL Server
1..加入命名空间
using System.Data.SqlClient;
2.连接数据库
SqlConnection myConnection = new SqlConnection(); myConnection.ConnectionString = "user id=sa;password=sinofindb;initial catalog=test;data source=127.0.0.1;Connect Timeout=30"; myConnection.Open();
改进(更通用)的方法:
string MySqlConnection="user id=sa;password=sinofindb;Database =test;data source=127.0.0.1;Connect Timeout=30"; SqlConnection myConnection = new SqlConnection(MySqlConnection); myConnection.Open();
二。用OleDbConnection连接
1.加入命名空间
using System.Data.OleDb;
2.连接sql server
string MySqlConnection="Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=test;Integrated Security=SSPI;";
SqlConnection myConnection = new SqlConnection(MySqlConnection); myConnection.Open();
3.连接Access(可通过建立.udl文件获得字符串)
string MySqlConnection="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\db2000.mdb;
Persist Security Info=False;
4.连接Oracle(也可通过OracleConnection连接)
string MySqlConnection="Provider=MSDAORA;Data Source=db; user id=sa;password=sinofindb";
三.创建Command对象
1.SqlCommand 构造函数
①初始化 SqlCommand 类的新实例。public SqlCommand();
SqlCommand myCommand = new SqlCommand();
②初始化具有查询文本的 SqlCommand 类的新实例。public SqlCommand(string);
String mySelectQuery = "SELECT * FROM mindata"; SqlCommand myCommand = new SqlCommand(mySelectQuery); ③初始化具有查询文本和 SqlConnection 的SqlCommand类实例。
Public SqlCommand(string, SqlConnection);
String mySelectQuery = "SELECT * FROM mindata"; string myConnectString = "user id=sa;password=;database=test;server=mySQLServer"; SqlConnection myConnection = new SqlConnection(myConnectString); SqlCommand myCommand = new SqlCommand(mySelectQuery,myConnection);
④初始化具有查询文本、SqlConnection 和 Transaction 的 SqlCommand 类实例。
public SqlCommand(string, SqlConnection, SqlTransaction);
SqlTransaction myTrans = myConnection.BeginTransaction(); String mySelectQuery = "SELECT * FROM mindata"; string myConnectString = "user id=sa;password=;database=test;server=mySQLServer"; SqlConnection myConnection = new SqlConnection(myConnectString); SqlCommand myCommand = new SqlCommand(mySelectQuery,myConnection, myTrans);
2.建立SqlCommand与SqlConnection的关联。
myCommand.Connection = myConnection;
或者:SqlCommand myCommand = myConnection.CreateCommand;
3.设置SqlCommand的查询文本。
myCommand.CommandText = "SELECT * FROM mindata";
或者第2种构造:SqlCommand myCommand = new SqlCommand(mySelectQuery);
给SqlCommand对象提供两个查询字符串,每个查询字符串访问不同的表,返回不同的结果集。
两个查询语句用分号分隔。
4. 执行命令。
ExecuteReader 返回一行或多行
ExecuteNonQuery 对 Connection 执行 Transact-SQL 语句并返回受影响的行数(int)
ExecuteScalar 返回单个值(如一个聚合值).返回结果集中第一行的第一列。忽略额外的列或行
ExecuteXmlReader 将 CommandText 发送到 Connection 并生成一个 XmlReader 对象。
SqlDataReader myReader = myCommand.ExecuteReader();
或SqlDataReader myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
while(myReader.Read()) //循环读取数据 { Console.WriteLine(myReader.GetString(0));// 获取指定列的字符串形式的值 Console.WriteLine(myReader. GetValue(1));// 获取以本机格式表示的指定列的值 }
CommandText = "select count(*) as NumberOfRegions from region"; Int count = (int) myCommand.ExecuteScalar();
关于OleDbCommand对象的使用。
四.DataReader的使用
1.遍历结果集
while (myReader.Read()) Console.WriteLine("\t{0}\t{1}", myReader.GetInt32(0), myReader.GetString(1)); myReader.Close();
2.使用序数索引器。
while (myReader.Read()) Console.WriteLine("\t{0}\t{1}", myReader[0].ToString(), myReader[1].ToString()); myReader.Close();
3.使用列名索引器。
while (myReader.Read()) Console.WriteLine("\t{0}\t{1}", myReader["code].ToString(), myReader["name"].ToString()); myReader.Close();
4.使用类型访问器。
public char GetChar(int i); 获取指定列的单个字符串形式的值 public DateTime GetDateTime(int i); 获取指定列的 DateTime 对象形式的值 public short GetInt16(int i); 获取指定列的 16 位有符号整数形式的[C#] public string GetString(int i); 获取指定列的字符串形式的值
5.得到列信息。
myReader.FieldCount 获取当前行中的列数 myReader.GetFieldType(序号) 获取是对象的数据类型的 Type myReader.GetDataTypeName(序号) 获取源数据类型的名称 myReader.GetName(序号) 获取指定列的名称 myReader.GetOrdinal(序号) 在给定列名称的情况下获取列序号
6.得到数据表的信息。
myReader.GetSchemaTable() 返回一个 DataTable
7.操作多个结果集。 myReader.NextResult() 使数据读取器前进到下一个结果集 do { while (myReader.Read()) Console.WriteLine("\t{0}\t{1}", myReader.GetInt32(0), myReader.GetString(1)); } while(myReader.NextResult());
五.DataAdapter
1.创建SqlDataAdapter 初始化 SqlDataAdapter 类的新实例。 public SqlDataAdapter(); 将指定的 SqlCommand 作为SelectCommand 属性,初始化 SqlDataAdapter 类的新实例。 public SqlDataAdapter(SqlCommand); 用 selectcommand字符串 和 SqlConnection对象初始化SqlDataAdapter 类的新实例。 public SqlDataAdapter(string, SqlConnection); 用 selectcommand字符串 和 一个连接字符串 初始化SqlDataAdapter 类的新实例。 public SqlDataAdapter(string, string);
2.DataAdapter和SqlConnection,SqlCommand建立关联。 1.DataAdapter在构造参数时建立 2.SqlDataAdapter adapter = new SqlDataAdapter(); adapter.SelectCommand = new SqlCommand(query, conn);
3.DataAdapter.Fill()方法。
在 DataSet 中添加或刷新行以匹配使用 DataSet 名称的数据源中的行,并创建一个名为“Table”的 DataTable。 public override int Fill(DataSet); 在 DataSet 中添加或刷新行以匹配使用 DataSet 和 DataTable 名称的数据源中的行。 public int Fill(DataSet, string);
在 DataSet 的指定范围中添加或刷新行以匹配使用 DataSet 和 DataTable 名称的数据源中的行。
public int Fill(DataSet, int, int, string);
在 DataTable 中添加或刷新行以匹配使用 DataTable 名称的数据源中的行。 public int Fill(DataTable);
在 DataTable 中添加或刷新行以匹配使用指定 DataTable 和 IDataReader 名称的数据源中的行。 protected virtual int Fill(DataTable, IDataReader);
在 DataTable 中添加或刷新行以匹配使用 DataTable 名称、指定的 SQL SELECT 语句和 CommandBehavior 的数据源中的行。 protected virtual int Fill(DataTable, IDbCommand, CommandBehavior);
六.DataTable 类
七.DataColumn 类
八.DataRow 类
九.DataSet 类 1.创建DataSet 对象
初始化 DataSet 类的新实例。 public DataSet();
用给定名称初始化 DataSet 类的新实例。 public DataSet(string);
2.用DataAdapter填充DataSet
DataSet myds=new DataSet(); adapter.fill(myds) adapter.fill(myds,”表名”); 用一个表去填充DataSet.
十. DataTableCollection 类。 表示 DataSet 的表的集合。
DataTableCollection dtc = ds.Tables; DataTable table = dtc[“表名”]; String strExpr = "id > 5"; String strSort = "name DESC"; DataRow[] foundRows = customerTable.Select( strExpr, strSort,);
进行动态的筛选和排序。 DataTable.Select() 方法 : 获取 DataRow 对象的数组,
①获取所有 DataRow 对象的数组。 public DataRow[] Select();
②按主键顺序(如没有主键,则按照添加顺序),获取与筛选条件相匹配的所有 DataRow 对象的数组。 public DataRow[] Select(string);
③获取按照指定的排序顺序且与筛选条件相匹配的所有 DataRow 对象的数组。
public DataRow[] Select(string, string);
④获取与排序顺序中的筛选器以及指定的状态相匹配的所有 DataRow 对象的数组。
public DataRow[] Select(string, string, DataViewRowState);
十一。DataView 类 : 是DataTable内容的动态视图。
1. 创建对象
初始化 DataView 类的新实例。
public DataView();
用指定的 DataTable 初始化 DataView 类的新实例。
public DataView(DataTable);
用指定的 DataTable、RowFilter、Sort 和 DataViewRowState 初始化 DataView 类的新实例。
public DataView(DataTable, string, string, DataViewRowState);
DataView myview = new DataView(ds.Tables["Suppliers"], "id > 5", "name DESC", DataViewRowState.CurrentRows);
2 .得到DataView的行数据。
foreach (DataRowView myrowview in myview) { for (int i = 0; i < myview.Table.Columns.Count; i++) Console.Write(myrowview + "\t"); Console.WriteLine(); }
|
http://hi.baidu.com/27360411/blog/item/e69c9bcc3316b91400e92871.html
ADO.NET的数据访问对象是以下几个: 1、Connection对象:与数据源建立连接,连接sql server7.0 或更新版本数据库用SqlConnection,连接OLEDB数据源使用OledbConnection. 2、Command 对象:对数据源执行SQL命令并返回结果,SQL Server7.0或更新版本用SqlCommand,OLE DB数据源使用OledbCommand. 3、DataReader对象: 读取数据源的数据,只能将数据源的数据从头到尾依次读出,Sql server7.0或以上版本使用SqlDataReader,Oledb数据源使用OledbReader 4、DataAdapter对象:对数据源执行操作并返回结果,在DataSet与数据源之间建立通信,将数据源中的数据写入DataSet ,或根据DataSet中的数据必定数据源。Sql server7.0或以上版本使用SqlDataAdapter,Oledb 数据源使用OledbAdpater. 5、DataSet对象:服务器内存中的数据库 6、DataView对象:用于显示DataSet中的数据
从数据库中读取纪录的另一种方法是使用Dataset对象和Dataadapter对象.Dataset是ADO.NET的主要组件之一,它用于缓存从数据源检索到的数据信息。Dataadapter作为Dataset和数据源之间的桥接器,用于检索和保存数据。Dataadapter从数据库中获取数据后使用Fill方法把数据填充到Dataset中。下面以Sqldataadapter为例说明如何使用Dataset对象和Dataadapter对象从数据库中读取记录。执行查询的关键步骤如下: 1、创建与数据库建立连接的Sqlconnection,传递连接字符串。 2、构造包含查询语句的Sqldataadapter对象; 3、若要使用查询结果填充Dataset对象,则调用命令Fill方法。
c#利用ado.net进行数据库开发的基本步骤: 1、创建和数据库连接的connection 对象。 2、配置DataAdapter对象并创建和操作数据集DataSet。 3、将数据库中的表添加到DataSet中。 4、把数据集DataSet绑定到DataGrid上。利用DataAdapter 的Fill方法把数据填充到DataSet,最终的数据库中的数据显示在用户界面的DataGrid中。
c#中从数据库查询记录的方法分类: 一般使用两种方法: 一种是通过DataReader对象直接访问;另一种则是通过数据集Dataset和Dataadapter对象访问. 使用ADO.NET的Datareader对象能从数据库中检索数据。检索出来的数据形成一个只读只进的数据流,存储在客户端的网络缓冲区内。Datareader对象的read方法可以前进到一下条记录。在默认情况下,每执行一次read方法只会在内存中存储一条记录系统的开销非常少。 创建datareader之前必须先创建sqlcommand对象,然后调用该对象的executereader方法来构造sqldatareader对象,而不是直接使用构造函数。 下面的示例程序完成的功能是访问sqlserver数据库,并使用datareader从northwind数据中读取记录,并将查询结果通过控制台输出。 using System; using System.Data; using System.Data.SqlClient; namespace ReadDataFromDB{
class Class1{
static void Main(string[] args){ string myconn="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind"; //需要执行的SQL语句 string mysql="select OrderID,CustomerID from Orders where CustomerID='CHOPS'"; //打开数据库连接。 SqlConnection myconnection=new SqlConnection(myconn); myconnection.Open(); //创建SqlCommand 对象 SqlCommand mycommand=new(mysql,myconnection); //通过SqlCommand的ExecuteReader()方法构造DataReader 对象。 SqlDataReader myreader=mycommand.ExecuteReader(); while(myreader.read()){ Console.WriteLine(myreader.GetInt32(0)+","+myreader.GetString(1));
} myreader.Close(); myconnection.Close();
}
}
}
http://blog.csdn.net/wuxianwei/archive/2008/01/22/2058070.aspx
如何取得图片的相关属性
我想load一张图片的时候,取得他的height ,width,size,不知道该怎么做? 菜鸟请教了~~ 问题点数:100、回复次数:3Top
1 楼good_sun(汉堡+泡面)回复于 2002-11-23 23:56:07 得分 25
用GetObject,注意不是VB中的GetObject,而是API函数GetObject。 这样: dim Bm as BITMAP GetObject PicHwnd,lenb(Bm),Bm MsgBox Bm.bmHeight & vbcrlf & Bm.bmWidth 上面PicHwnd是图象的句柄,可以直接用PictureBox或Image的Picture属性,BITMAP的类型声明从API浏览器里找Top
2 楼good_sun(汉堡+泡面)回复于 2002-11-24 00:20:33 得分 25
另外PictureBox或image的Picture属性都可以直接得到图象的尺寸。 例如: Msgbox Picture1.Picture.Width 不过注意上面返回的单位是Himetric,要转换成点要这样: Msgbox ScaleX(Picture1.Picture.Width,vbHimetric,vbPixels)Top
3 楼zyl910(910:闭关修炼中...)回复于 2002-11-24 14:05:45 得分 50
Height、Width 属性 语法 object.Height [= number] object.Width [= number] Height 和 Width 属性语法包含下面部分: 部分 描述 object 对象表达式,其值是“应用于”列表中的一个对象。 number 数值表达式,指定对象的维数,“设置值”中有详细说明。 设置值 大小如下计算: Picture(StdPicture、IPictureDisp) 对象-以 HiMetric 为单位的图片的高度和宽度。 对于 Picture(StdPicture、IPictureDisp) 对象,用 ScaleX 和 ScaleY 方法将 HiMetric 单位转换为所需的单位。 ScaleX、ScaleY 方法 用以将 Form,PictureBox 或 Printer 的宽度或高度值从一种 ScaleMode 属性的度量单位转换到另一种。不支持命名参数。 语法 object.ScaleX (width, fromscale, toscale) object.ScaleY (height, fromscale, toscale) ScaleX 和 ScaleY 方法的语法包含如下部分: 部分 描述 object 可选的。一个对象表达式,其值为“应用于”列表中的一个对象。如果省略 object,则带有焦点的 Form 对象缺省为 object。 width 必需的。为 object 指定被转换的度量单位的数量。 height 必需的。为 object 指定被转换的度量单位的数量。 fromscale 可选的。一个常数或数值,按照下列设置中的描述,指定 object 的 width 或 height 从哪一种坐标系统转换。fromscale 可取的数值与 ScaleMode 属性的数值加上 HiMetric 的新数值相同。 toscale 可选的。一个常数或数值,按照下列“设置值”中的描述,指定 object 的 width 或 height 转换到哪一种坐标系统。toscale 可取的数值与 ScaleMode 属性的数值加上 HiMetric 的新数值相同。 设置值 用于 fromscale 和 toscale 设置值有: 常数 值 描述 vbUser 0 用户定义:指示 object 的宽度和高度设置为自定义值。 vbTwips 1 缇(每逻辑英寸 1440 缇;每逻辑厘米 567 缇)。 vbPoints 2 磅(每逻辑英寸 72 点)。 vbPixels 3 像素 (显示器或打印机分辨率的最小单位)。 vbCharacters 4 字符(水平 = 每单位 120 缇,垂直 = 每单位 240 缇)。 vbInches 5 英寸 vbMillimeters 6 毫米 vbCentimeters 7 厘米 vbHimetric 8 HiMetric。如果省略 fromscale,则 HiMetric 为缺省值。 vbContainerPosition 9 决定控件位置。 vbContainerSize 10 决定控件大小。 说明 ScaleX 和 ScaleY 方法按 fromscale 指定的度量单位取值(width 或 height),并将它转换为 toscale 指定的度量单位下相应的值。 也可以结合 PaintPicture 方法使用 ScaleX 和 ScaleY。 Top
net start 服务名 net stop 服务名
用Net services可以查看所有服务
|